Django Request对象3.3
生活随笔
收集整理的這篇文章主要介紹了
Django Request对象3.3
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HttpReqeust對象
- 服務器接收到http協議的請求后,會根據報文創建HttpRequest對象
- 視圖函數的第一個參數是HttpRequest對象
- 在django.http模塊中定義了HttpRequest對象的API
屬性
- 下面除非特別說明,屬性都是只讀的
- path:一個字符串,表示請求的頁面的完整路徑,不包含域名
- method:一個字符串,表示請求使用的HTTP方法,常用值包括:'GET'、'POST'
- encoding:一個字符串,表示提交的數據的編碼方式
- 如果為None則表示使用瀏覽器的默認設置,一般為utf-8
- 這個屬性是可寫的,可以通過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值
- GET:一個類似于字典的對象,包含get請求方式的所有參數
- POST:一個類似于字典的對象,包含post請求方式的所有參數
- FILES:一個類似于字典的對象,包含所有的上傳文件
- COOKIES:一個標準的Python字典,包含所有的cookie,鍵和值都為字符串
- session:一個既可讀又可寫的類似于字典的對象,表示當前的會話,只有當Django 啟用會話的支持時才可用,詳細內容見“狀態保持”
方法
- is_ajax():如果請求是通過XMLHttpRequest發起的,則返回True
QueryDict對象
- 定義在django.http.QueryDict
- request對象的屬性GET、POST都是QueryDict類型的對象
- 與python字典不同,QueryDict類型的對象用來處理同一個鍵帶有多個值的情況
- 方法get():根據鍵獲取值
- 只能獲取鍵的一個值
- 如果一個鍵同時擁有多個值,獲取最后一個值
dict.get('鍵',default)
或簡寫為
dict['鍵']
- 方法getlist():根據鍵獲取值
- 將鍵的值以列表返回,可以獲取一個鍵的多個值
dict.getlist('鍵',default)
GET屬性
- QueryDict類型的對象
- 包含get請求方式的所有參數
- 與url請求地址中的參數對應,位于?后面
- 參數的格式是鍵值對,如key1=value1
- 多個參數之間,使用&連接,如key1=value1&key2=value2
- 鍵是開發人員定下來的,值是可變的
- 示例如下
- 創建視圖getTest1用于定義鏈接,getTest2用于接收一鍵一值,getTest3用于接收一鍵多值
def getTest1(request):return render(request,'booktest/getTest1.html')
def getTest2(request):return render(request,'booktest/getTest2.html')
def getTest3(request):return render(request,'booktest/getTest3.html')
- 配置url
url(r'^getTest1/$', views.getTest1),
url(r'^getTest2/$', views.getTest2),
url(r'^getTest3/$', views.getTest3),
- 創建getTest1.html,定義鏈接
<html>
<head><title>Title</title>
</head>
<body>
鏈接1:一個鍵傳遞一個值
<a href="/getTest2/?a=1&b=2">gettest2</a><br>
鏈接2:一個鍵傳遞多個值
<a href="/getTest3/?a=1&a=2&b=3">gettest3</a>
</body>
</html>
- 完善視圖getTest2的代碼
def getTest2(request):a=request.GET['a']b=request.GET['b']context={'a':a,'b':b}return render(request,'booktest/getTest2.html',context)
- 創建getTest2.html,顯示接收結果
<html>
<head><title>Title</title>
</head>
<body>
a:{{ a }}<br>
b:{{ b }}
</body>
</html>
- 完善視圖getTest3的代碼
def getTest3(request):a=request.GET.getlist('a')b=request.GET['b']context={'a':a,'b':b}return render(request,'booktest/getTest3.html',context)
- 創建getTest3.html,顯示接收結果
<html>
<head><title>Title</title>
</head>
<body>
a:{% for item in a %}
{{ item }}
{% endfor %}
<br>
b:{{ b }}
</body>
</html>
POST屬性
- QueryDict類型的對象
- 包含post請求方式的所有參數
- 與form表單中的控件對應
- 問:表單中哪些控件會被提交?
- 答:控件要有name屬性,則name屬性的值為鍵,value屬性的值為鍵,構成鍵值對提交
- 對于checkbox控件,name屬性一樣為一組,當控件被選中后會被提交,存在一鍵多值的情況
- 鍵是開發人員定下來的,值是可變的
- 示例如下
- 定義視圖postTest1
def postTest1(request):return render(request,'booktest/postTest1.html')
- 配置url
url(r'^postTest1$',views.postTest1)
- 創建模板postTest1.html
<html>
<head><title>Title</title>
</head>
<body>
<form method="post" action="/postTest2/">姓名:<input type="text" name="uname"/><br>密碼:<input type="password" name="upwd"/><br>性別:<input type="radio" name="ugender" value="1"/>男<input type="radio" name="ugender" value="0"/>女<br>愛好:<input type="checkbox" name="uhobby" value="胸口碎大石"/>胸口碎大石<input type="checkbox" name="uhobby" value="跳樓"/>跳樓<input type="checkbox" name="uhobby" value="喝酒"/>喝酒<input type="checkbox" name="uhobby" value="爬山"/>爬山<br><input type="submit" value="提交"/>
</form>
</body>
</html>
- 創建視圖postTest2接收請求的數據
def postTest2(request):uname=request.POST['uname']upwd=request.POST['upwd']ugender=request.POST['ugender']uhobby=request.POST.getlist('uhobby')context={'uname':uname,'upwd':upwd,'ugender':ugender,'uhobby':uhobby}return render(request,'booktest/postTest2.html',context)
- 配置url
url(r'^postTest2$',views.postTest2)
- 創建模板postTest2.html
<html>
<head><title>Title</title>
</head>
<body>
{{ uname }}<br>
{{ upwd }}<br>
{{ ugender }}<br>
{{ uhobby }}
</body>
</html>
- 注意:使用表單提交,注釋掉settings.py中的中間件crsf
?
?
總結
以上是生活随笔為你收集整理的Django Request对象3.3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django 视图函数
- 下一篇: Django Response对象3.4