日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django视图(二)

發布時間:2024/4/11 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django视图(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Django視圖(二)

文章目錄

  • Django視圖(二)
    • 一、HttpReqeust對象
      • 1.QueryDict對象
      • 2.GET屬性
      • 3.POST屬性
    • 二、HttpResponse對象
      • 1.屬性
      • 2.方法
      • 3. **`示例`**
      • 4.調用模板
    • 三、子類JsonResponse
      • 1.示例
    • 四、子類HttpResponseRedirect
      • 1.示例
      • 2.重定向簡寫函數redirect

一、HttpReqeust對象

1.QueryDict對象

  • 定義在django.http.QueryDict
  • HttpRequest對象的屬性GET、POST都是QueryDict類型的對象
  • 與python字典不同,QueryDict類型的對象用來處理同一個鍵帶有多個值的情況
  • 方法get():根據鍵獲取值
  • 如果一個鍵同時擁有多個值將獲取最后一個值
  • 如果鍵不存在則返回None值,可以設置默認值進行后續處理
dict.get('鍵',默認值) 可簡寫為 dict['鍵']
  • 方法getlist():根據鍵獲取值,值以列表返回,可以獲取指定鍵的所有值
  • 如果鍵不存在則返回空列表[],可以設置默認值進行后續處理
dict.getlist('鍵',默認值)

2.GET屬性

請求格式:在請求地址結尾使用?,之后以"鍵=值"的格式拼接,多個鍵值對之間以&連接。

例:網址如下

http://www.itcast.cn/?a=10&b=20&c=python

其中的請求參數為:

a=10&b=20&c=python
  • 分析請求參數,鍵為’a’、‘b’、‘c’,值為’10’、‘20’、‘python’。
  • Django中可以使用HttpRequest對象的GET屬性獲得get方方式請求的參數
  • GET屬性是一個QueryDict類型的對象,鍵和值都是字符串類型。
  • 鍵是開發人員在編寫代碼時確定下來的。
  • 值是根據數據生成的。

3.POST屬性

使用form表單請求時,method方式為post則會發起post方式的請求,需要使用HttpRequest對象的POST屬性接收參數,POST屬性是一個QueryDict類型的對象。

問:表單form如何提交參數呢?

答:表單控件name屬性的值作為鍵,value屬性的值為值,構成鍵值對提交。

  • 如果表單控件沒有name屬性則不提交。

  • 對于checkbox控件,name屬性的值相同為一組,被選中的項會被提交,出現一鍵多值的情況。

  • 鍵是表單控件name屬性的值,是由開發人員編寫的。

  • 值是用戶填寫或選擇的。

  • 示例

1)打開booktest/views.py文件,創建視圖show_reqarg。

#接收請求參數 def show_reqarg(request):if request.method == 'GET':a = request.GET.get('a') #獲取請求參數ab = request.GET.get('b') #獲取請求參數bc = request.GET.get('c') #獲取請求參數creturn render(request, 'booktest/show_getarg.html', {'a':a, 'b':b, 'c':c})else:name = request.POST.get('uname') #獲取namegender = request.POST.get('gender') #獲取genderhobbys = request.POST.getlist('hobby') #獲取hobbyreturn render(request, 'booktest/show_postarg.html', {'name':name, 'gender':gender, 'hobbys':hobbys})

2)打開booktest/urls.py文件,配置url。

url(r'^show_reqarg/$', views.show_reqarg),

3)修改templates/booktest目錄下的index.html,添加代碼如下:

<html> <head><title>首頁</title> </head> <body> ... ...

3.提交數據的兩種方式:

get方式:<br/> <a href="/show_reqarg/?a=1&b=2&c=python">get方式提交數據</a><br/> post方式:<br/> <form method="post" action="/show_reqarg/">姓名:<input type="text" name="uname"><br/>性別:男<input type="radio" name="gender" value="男"/><input type="radio" name="gender" value="女"/><br/>愛好:吃飯<input type="checkbox" name="hobby" value="吃飯"/>睡覺<input type="checkbox" name="hobby" value="睡覺"/>打豆豆<input type="checkbox" name="hobby" value="打豆豆"/><br><input type="submit" value="提交"> </form> <br/> </body> </html>

4)運行服務器。

http://127.0.0.1:8000/

瀏覽效果如下圖:

5)在templates/booktest目錄下創建show_getarg.html,show_postarg.html,代碼如下:

show_getarg.html:

<html> <head><title>GET方式提交數據</title> </head> <body> a:{{ a }}<br/> b:{{ b }}<br/> c:{{ c }}<br/> </body> </html>

show_postarg.html:

<html> <head><title>POST方式提交數據</title> </head> <body> name:{{ name }}<br/> gender:{{ gender }}<br/> hobbys: <ul>{% for hobby in hobbys %}<li>{{ hobby }}</li>{% endfor %} </ul> </body> </html>

6)點擊鏈接GET方式提交數據,瀏覽效果如下圖:

7)后退到index頁面,輸入數據如下,點擊提交,瀏覽效果如下圖:

二、HttpResponse對象

視圖在接收請求并處理后,必須返回HttpResponse對象或子對象。在django.http模塊中定義了HttpResponse對象的API。HttpRequest對象由Django創建,HttpResponse對象由開發人員創建。

運行服務器,在瀏覽器中瀏覽首頁,可以在瀏覽器“開發者工具”中看到響應信息如下圖:

標號3為響應頭信息,點擊標號4處可以查看響應體信息。

1.屬性

  • content:表示返回的內容。
  • charset:表示response采用的編碼字符集,默認為utf-8。
  • status_code:返回的HTTP響應狀態碼。
  • content-type:指定返回數據的的MIME類型,默認為’text/html’。

2.方法

  • init:創建HttpResponse對象后完成返回內容的初始化。
  • set_cookie:設置Cookie信息。
  • set_cookie(key, value=’’, max_age=None, expires=None)

cookie是網站以鍵值對格式存儲在瀏覽器中的一段純文本信息,用于實現用戶跟蹤。
max_age是一個整數,表示在指定秒數后過期
expires是一個datetime或timedelta對象,會話將在這個指定的日期/時間過期。 max_age與expires二選一。
如果不指定過期時間,在關閉瀏覽器時cookie會過期。

  • delete_cookie(key):刪除指定的key的Cookie,如果key不存在則什么也不發生。
  • write:向響應體中寫數據。

3. 示例

直接返回數據

1)打開booktest/views.py文件,定義視圖index2如下:

def index2(request):str='<h1>hello world</h1>'return HttpResponse(str)

2)打開booktest/urls.py文件,配置url。

url(r'^index2/$',views.index2),

3)運行服務器,在瀏覽器中打開如下網址。

http://127.0.0.1:8000/index2/

運行效果如下圖:

如果使用這種方式構造一個漂亮豐富的頁面,對于開發人員真是會發瘋,于是就有了下面的方式:

4.調用模板

可以將html、css、js定義到一個html文件中,然后由視圖來調用。

1)打開booktest/views.py文件,定義視圖index3如下:

from django.template import RequestContext, loader ... def index3(request):#加載模板t1=loader.get_template('booktest/index3.html')#構造上下文context=RequestContext(request,{'h1':'hello'})#使用上下文渲染模板,生成字符串后返回響應對象return HttpResponse(t1.render(context))

2)打開booktest/urls.py文件,配置url。

url(r'^index3/$',views.index3),

3)在templates/booktest/目錄下創建index3.html,代碼如下:

<html> <head><title>使用模板</title> </head> <body> <h1>{{h1}}</h1> </body> </html>

4)運行服務器,在瀏覽器中打開如下網址。

http://127.0.0.1:8000/index3/

運行效果如下圖:

  • 調用模板簡寫函數render

每次調用模板時都要執行加載、上下文、渲染三個步驟,為了簡化操作,Django定義了render()函數封裝了以上三個步驟的代碼,定義在django.shortcuts模塊中。

1)打開booktest/views.py文件,定義視圖index3如下:

from django.shortcuts import render ... def index3(request):return render(request, 'booktest/index3.html', {'h1': 'hello'})

三、子類JsonResponse

在瀏覽器中使用javascript發起ajax請求時,返回json格式的數據,此處以jquery的get()方法為例。

  • 類JsonResponse繼承自HttpResponse對象,被定義在django.http模塊中,創建對象時接收字典作為參數。

JsonResponse對象的content-type為’application/json’。

1.示例

1)在booktest/views.py文件中定義視圖json1、json2,代碼如下:

from django.http import JsonResponse ... def json1(request):return render(request,'booktest/json1.html') def json2(request):return JsonResponse({'h1':'hello','h2':'world'})

2)在booktest/urls.py文件中配置url。

url(r'^json1/$', views.json1),url(r'^json2/$', views.json2),

3)創建目錄static/js/,把jquery文件拷貝到這個目錄下。

4)打開test3/settings.py文件,在文件最底部,配置靜態文件查找路徑,并且要求開啟調試

DEBUG = True ... STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

5)在templates/booktest/目錄下創建json1.html,代碼如下:

<html> <head><title>json</title><script src="/static/js/jquery-1.12.4.min.js"></script><script>$(function () {$('#btnJson').click(function () {$.get('/json2/',function (data) {ul=$('#jsonList');ul.append('<li>'+data['h1']+'</li>')ul.append('<li>'+data['h2']+'</li>')})});});</script> </head> <body> <input type="button" id="btnJson" value="獲取json數據"> <ul id="jsonList"></ul> </body> </html>

6)運行服務器,在瀏覽器中輸入如下地址。

http://127.0.0.1:8000/json1/

7)點擊按鈕"獲取json數據"后瀏覽如下圖。

ajax代碼執行過程如下:
1.發起請求。
2.服務器端視圖函數執行。
3.執行回調函數。

四、子類HttpResponseRedirect

  • 當一個邏輯處理完成后,不需要向客戶端呈現數據,而是轉回到其它頁面,如添加成功、修改成功、刪除成功后顯示數據列表
  • 而數據的列表視圖已經開發完成,此時不需要重新編寫列表的代碼,而是轉到這個視圖就可以,此時就需要模擬一個用戶請求的效果,從一個視圖轉到另外一個視圖,就稱為重定向。

Django中提供了HttpResponseRedirect對象實現重定向功能,這個類繼承自HttpResponse,被定義在django.http模塊中,返回的狀態碼為302。

1.示例

1)在booktest/views.py文件中定義視圖red1,代碼如下:

from django.http import HttpResponseRedirect ... # 定義重定義向視圖,轉向首頁 def red1(request):return HttpResponseRedirect('/')

2)在booktest/urls.py文件中配置url。

url(r'^red1/$', views.red1),

3)在地址欄中輸入網址如下:

http://127.0.0.1:8000/red1/

4)回車后,瀏覽器地址欄如下圖。

2.重定向簡寫函數redirect

在django.shortcuts模塊中為重定向類提供了簡寫函數redirect

1)修改booktest/views.py文件中red1視圖,代碼如下:

from django.shortcuts import redirect ... def red1(request):return redirect('/')

總結

以上是生活随笔為你收集整理的Django视图(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。