Python Django之GET请求和POST请求及响应处理
一、請求中的方法
| GET | 請求指定的頁面信息,并返回實體主體。 |
| HEAD | 類似于GET請求,只不過返回的響應中沒有具體的內容,用于獲取報頭。 |
| POST | 向指定資源提交數據進行處理請求(例如:提交表單或者上傳文件)。數據被包含在請求體中。PoST請求可能會導致新的資源的建立和/或已有資源的修改。 |
| PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
| DELETE | 請求服務器刪除指定的頁面。 |
| CONNECT | HTTP/1.1協議中預留能夠將連接改為管道方式的代理服務器。 |
| OPTIONS | 允許客戶端查看服務器的性能。 |
| TRACE | 回顯服務器收到的請求,主要用于測試或連接。 |
二、Django中的請求
| path_info | URL字符串 |
| method | 字符串,表示HTTP請求方法,常用值:‘GET’、‘POST’ |
| GET | QueryDict查詢字典的對象,包含get請求方式的所有數據。 |
| POST | QueryDict查詢字典的對象,包含post請求方式的所有數據。 |
| FILES | 類似于字典的對象,包含所有的上傳文件信息。 |
| COOKIES | Python字典,包含所有的cookie,鍵和值都為字符串。 |
| session | 似于字典的對象,表示當前的會話。 |
| body | 字符串,請求體的內容(POST或PUT) |
| scheme | 請求協議(‘http’/‘https’) |
| request.get_full_path() | 請求的完整路徑 |
| request.META | 請求中的元數據(消息頭),-request.META[‘REMOTE_ADDR’]:客戶端IP地址 |
三、響應狀態碼
下面是常見的HTTP狀態碼:
- 200 - 請求成功
- 301 - 永久重定向-資源(網頁等)被永久轉移到其他URL
- 302 - 臨時重定向
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部服務器錯誤
四、Django中的響應對象
構造函數格式:
HttpResponse(content=響應體,content_type=響應體數據類型,status=狀態碼)
作用:
向客戶端瀏覽器返回響應,同時攜帶響應體內容
參數:
- content:表示返回的內容。
- ststus_code:返回的HTTP響應狀態碼(默認為200)。
- content_type:指定返回數據的MIME類型(默認為"text/html")。瀏覽器會根據這個屬性,來顯示數據。如果是text/html,那么就會解析這個字符串,如果text/plain,那么就會顯示一個純文本。
常用的Content-Type如下:
- ‘text/html’:默認的html文件
- ‘text/plain’:純文本
- ‘text/css’:css文件
- ‘text/javascript’:js文件
- ‘multipart/form-data’:文件提交
- ‘application/json’:json傳輸
- ‘application/xml’:xml文件
HttpResponse子類:
| HttpResponseRedirect | 重定向 | 302 |
| HttpResponseNotModified | 未修改 | 304 |
| HttpResponseBadRequest | 錯誤請求 | 400 |
| HttpResponseNotFound | 沒有對應的資源 | 404 |
| HttpResponseForbidden | 請求被禁止 | 403 |
| HttpResponseServerError | 服務器錯誤 | 500 |
五、GET請求實例測試
Python利用Django創建mysite工程,添加views.py文件,如下圖示:
urls.py文件代碼:
from django.contrib import admin from django.urls import path, re_path from . import viewsurlpatterns = [path('admin/', admin.site.urls),# http://127.0.0.1:8000/test_requestpath('test_request/', views.test_request), ]views.py文件代碼:
from django.http import HttpResponsedef test_request(request):print('path info is : ', request.path_info)print('method is : ', request.method)print('querystring is : ', request.GET)print('full path is :', request.get_full_path())print('客戶端IP is :', request.META['REMOTE_ADDR'])return HttpResponse('test request ok')編譯運行后,在瀏覽器地址欄輸入:http://127.0.0.1:8000/test_request/?m=1&n=2效果如下:
六、GET處理和POST處理
定義:
無論是GET還是POST,統一都由視圖函數接收請求,通過判斷request.method區分具體的請求動作。
GET處理:
GET請求動作,一般用于向服務器獲取數據。
能夠產生GET請求的場景:
-
瀏覽器地址欄中輸入URL,回車后
-
<a href="地址?參數=值&參數=值">
-
form表單中的method為get
POST處理:
POST請求動作,一般用于向服務器提交大量/隱私數據。
客戶端通過表單等POST請求將數據傳遞給服務端。
服務器端接收參數,通過request.method來判斷是否為POST請求。
七、GET處理和POST處理實例測試
urls.py文件代碼:
from django.contrib import admin from django.urls import path, re_path from . import viewsurlpatterns = [path('admin/', admin.site.urls),# http://127.0.0.1:8000/main_pagepath('main_page/', views.main_page),# http://127.0.0.1:8000/test_get_postpath('test_get_post/', views.test_get_post), ]views.py文件代碼:
from django.http import HttpResponse, HttpResponseRedirectPOST_FORM = ''' <form method='post' action='/test_get_post/'>用戶名:<input type='text' name='uname'><input type='submit' value='提交'> </form> '''def main_page(request):html = """<h4>這是我的網站首頁</h4><a href="http://www.datutusuibi.com/" target="_blank">大土土隨筆</a>"""return HttpResponse(html)def test_get_post(request):if request.method == 'GET':print(request.GET)print(request.GET['m'])print(request.GET.getlist('m'))print(request.GET.get('t', 'no t'))return HttpResponse(POST_FORM)elif request.method == 'POST':# 處理用戶提交數據print('uname is : ', request.POST['uname'])return HttpResponseRedirect('/main_page/')else:passreturn HttpResponse('test get post ok')使用POST方式接收客戶端數據時,需要取消csrf驗證。
編譯運行后,在瀏覽器地址欄輸入:http://127.0.0.1:8000/test_get_post/?m=1&n=2&m=3效果如下:
輸入用戶名,單擊“提交”按鈕,
效果如下:
獲取更多資料,請訪問大土土隨筆
如果本文對您有所幫助,請關注微信公眾號“捷創源科技”
總結
以上是生活随笔為你收集整理的Python Django之GET请求和POST请求及响应处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AndroidStudio使用入门
- 下一篇: Linux(Ubuntu20.10)安装