天天看點

HttpReqeust對象

一、作用

用戶端給伺服器傳遞資料所用

二、概述

  • 伺服器接收到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">'&lt;tr&gt;&lt;td&gt;{}&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;/tr&gt;'</span>.format(k,v))
    <span class="hljs-comment"># return HttpResponse('request屬性')</span>
    <span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">'&lt;table&gt;%s&lt;/table&gt;'</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>)
           

複制