一、作用
用戶端給伺服器傳遞資料所用
二、概述
- 伺服器接收到http協定的請求後,會根據封包建立HttpRequest對象
- 視圖函數的第一個參數是HttpRequest對象
- HttpRequest對象中儲存了用戶端傳遞的資料
三、屬性
path 請求的完整路徑,不包含域名和端口
method 請求方式,常用的get和post
encoding 送出資料的編碼格式
值:如果為None,表示使用浏覽器預設的編碼格式,一般為utf-8
GET 一個類似字典的對象,包含get請求方式的所有參數
POST 一個類似字典的對象,包含post請求方式的所有參數
如果表單送出失敗 檢視是否存在{% csrf_token %} 或者将Middleware中的csrf關閉
FILES 一個類似字典的對象,包含所有的上傳檔案
COOKIES 是一個标準的字典,包含了所有的cookie
session 一個類似字典的對象,表示目前會話資訊,隻有Django開啟session服務後才會有該屬性,預設是開啟的
META 包含了http請求的所有header頭資訊
格式化後顯示
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">requestAttr</span><span class="hljs-params">(request)</span>:</span>
values = request.META.items()
html = []
<span class="hljs-keyword">for</span> k,v <span class="hljs-keyword">in</span> values:
html.append(<span class="hljs-string">'<tr><td>{}</td><td>{}</td></tr>'</span>.format(k,v))
<span class="hljs-comment"># return HttpResponse('request屬性')</span>
<span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">'<table>%s</table>'</span>%<span class="hljs-string">'\n'</span>.join(html))
複制
常用的key值
- REMOTE_ADDR 用戶端IP位址
- HTTP_USER_AGENT 浏覽器和系統的資訊的字元串
- HTTP_REFERER 擷取從哪裡點選過啦的連結位址
示例
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">index</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-comment">#分析客戶想幹什麼(客戶給服務的資料)</span>
print(request.path)
print(request.method)
print(request.encoding)
print(request.GET)
print(request.POST)
print(request.FILES)
print(request.COOKIES)
print(request.session)
<span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">"lucky is a good man"</span>)
複制
四、方法
- get_full_path() 擷取完整的請求(不包括域名和端口)
- get_host() 擷取主機和端口
- is_ajax() 判斷是否為ajax請求
五、QueryDict對象
-
說明
類似字典的對象,與字典的差別是可以有相同的鍵,request對象中的GET、POST屬性都是QueryDict類型的對象
- 方法
-
get()
作用:根據鍵擷取值
注意
- 隻能擷取鍵的一個值
- 如果有多個相同的鍵,則擷取最後一個值
-
getlist()
request.GET.getlist(‘key’)
作用:根據鍵傳回多個值的清單
-
六、GET屬性
格式
request.GET
URL位址為
http://127.0.0.1:8000/lucky/?a=1&b=2&c=3
示例
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get1</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
<span class="hljs-comment">#擷取用戶端傳遞的資料</span>
a = request.GET.get(<span class="hljs-string">"a"</span>)
b = request.GET.get(<span class="hljs-string">"b"</span>)
c = request.GET.get(<span class="hljs-string">"c"</span>)
<span class="hljs-keyword">return</span> HttpResponse(a+b+c)
複制
URL位址為
http://127.0.0.1:8000/lucky/?a=1&a=2&c=3
示例
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get2</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
alist = request.GET.getlist(<span class="hljs-string">"a"</span>)
c = request.GET.get(<span class="hljs-string">"c"</span>)
<span class="hljs-keyword">return</span> HttpResponse(alist[<span class="hljs-number">0</span>]+alist[<span class="hljs-number">1</span>]+c)
複制
七、POST屬性
注冊界面 register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注冊</title>
</head>
<body>
<form action="/register/" method="post">
{% csrf_token %}
賬号:<input type="text" name="account"><br/>
密碼:<input type="password" name="password"><br/>
驗證密碼:<input type="password" name="yzm"><br/>
<input type="submit" value="注冊">
</form>
</body>
</html>
複制
路由
re_path(<span class="hljs-string">r'register/'</span>, views.register),
複制
視圖
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">register</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
<span class="hljs-keyword">return</span> render(request, <span class="hljs-string">"App/register.html"</span>)
<span class="hljs-keyword">else</span>:
<span class="hljs-comment">#擷取用戶端傳遞的資料</span>
account = request.POST.get(<span class="hljs-string">"account"</span>)
password = request.POST.get(<span class="hljs-string">"password"</span>)
yzm = request.POST.getlist(<span class="hljs-string">"yzm"</span>)
print(account)
print(password)
print(yzm)
<span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">"注冊成功"</span>)
複制