1. 程式人生 > >Django中HtttpRequest請求

Django中HtttpRequest請求

1.什麼是HttpRequest
  HttpRequest,就是對請求物件的封裝,裡面封裝的是請求過程中的所有資訊。在Django中HttpRequest被封裝成request物件並封裝到檢視處理函式中,在呼叫檢視時自動傳入
2.HttpRequest中的主要內容

  可以使用print(dir(request))檢視裡面所有的屬性及方法。
  1.request.scheme : 請求協議
  2.request.body : 請求主體
  3.request.path : 請求路徑
  4.request.get_full_path() : 請求完整的請求路徑
  5.request.get_host() : 請求的主機地址 / 域名
  6.request.method : 主要用於判斷是否是“GET”或是“POST”方法
  7.request.GET : 封裝了get請求方式所提交的資料
  8.request.POST : 封裝了post請求方式所提交的資料
  9.request.COOKIES : 封裝了 cookies 中的所有資料
  10.request.META : 封裝了請求的元資料
    request.META.HTTP_REFERER : 封裝了請求的源地址

3.獲取請求提交的資料
  1.get 請求
    1.獲取資料
      request.GET['名稱']
      request.GET.get('名稱')
      request.GET.getlist('名稱')
    2.使用get方式提交資料的場合
      1.表單中 method 為get 的時候
      2.位址列上拼查詢字串的時候
        http://localhost:8000/01-request/?id=1&name=xxx

      注意:
        url(r'^01-request/(\d{4})/(\d{1,})',xxx)
        http://localhost:8000/01-request/2018/10

        以上方式提交的資料不能使用request.GET來獲取,因為以上的方式是 Django 標準而並非 HTTP 標準

  2.post 請求
    1.獲取資料
      request.POST['名稱']
      request.POST.get('名稱')
      request.POST.getlist('名稱')
    2.使用POST方式提交資料的場合
      1.使用表單提交時可以使用post
    3.CSRF verification failed (403)
      CSRF : Cross-Site Request Forgery
          跨站點       請求          偽裝

    解決方案:
    1.取消csrf的驗證:刪除 settings.py中 MIDDLEWARE 中的 CsrfViewMiddleware 中介軟體
    2.在處理函式上增加裝飾器:@csrf_protect
    3.可以在 表單中的 第一行增加:{% csrf_token %}