【django】HttpRequest对象
回想?下,利?HTTP協議向服務器傳參有?種途徑?
a、提取URL的特定部分,如/film/zhangsan/20/,可以在服務器端的路由中?正則表達式截取;
b、查詢字符串(query string),形如key1=value1&key2=value2;
c、請求體(body)中發送的數據,?如表單數據、json、xml;
d、在http報?的頭(header)中。
一. URL路徑參數
1、如果想從URL中獲取值,需要在正則表達式中使?分組,
2、獲取值分為兩種?式
2.1、位置參數
a、參數的位置不能錯
2.2、關鍵字參數
a、參數的位置可以變,跟關鍵字保持?致即可
注意:兩種參數的?式不要混合使?,在?個正則表達式中只能使??種參數?式
1、位置參數
子路由:
from django.urls import re_path from film import views urlpatterns = [ re_path('^people/(\d+)/(\d+)/$',views.peopleView) ]視圖:
def peopleView(request,age,name): print(name) return HttpResponse('%s-%s'%(name,age))2、關鍵字參數
子路由
re_path('^people/(?P<name>\w+)/(?P<age>\d+)/$',views.peopleView) path('people/<str:name>/<int:age>/',views.peopleView),視圖
def peopleView(request,age,name): print(name) return HttpResponse('%s-%s'%(name,age))二、django中的QueryDict對象
HttpRequest對象的屬性GET、POST都是QueryDict類型的對象
與python字典不同,QueryDict類型的對象?來處理同?個鍵帶有多個值的情況
1、?法get():根據鍵獲取值
a、如果?個鍵同時擁有多個值將獲取最后?個值
b、如果鍵不存在則返回None值,可以設置默認值進?后續
c、處理get(‘鍵’,默認值)
2、?法getlist():根據鍵獲取值,值以列表返回,可以獲取指定鍵的所有值
a、如果鍵不存在則返回空列表[],可以設置默認值進?后續處理
b、getlist(‘鍵’,默認值)
三、查詢字符串Query String
獲取請求路徑中的查詢字符串參數(形如?k1=v1&k2=v2),可以通過request.GET屬性獲取,返回QueryDict對象。
def get(request): a = request.GET.get('a') b = request.GET.get('b') alist = request.GET.getlist('a') print(a) # 3 print(b) # 2 print(alist) # ['1', '3'] return HttpResponse('OK')重要:查詢字符串不區分請求?式,即假使客戶端進?POST?式的請求,依然可以通過request.GET獲取請求中的查詢字符串數據。
四、請求體
請求體數據格式不固定,可以是表單類型字符串,可以是JSON字符串,可以是XML字符串,應區別對待。
可以發送請求體數據的請求?式有POST、PUT、PATCH、DELETE。
Django默認開啟了CSRF防護,會對上述請求?式進?CSRF防護驗證,在測試時可以關閉CSRF防護機制,?法為在settings.py?件中注釋掉CSRF中間件,
4.1 表單類型 Form Data
前端發送的表單類型的請求體數據,可以通過request.POST屬性獲取,返回QueryDict對象。
4.2 ?表單類型 Non-Form Data
?表單類型的請求體數據,Django?法?動解析,可以通過request.body屬性獲取最原始的請求體數據,??按照請求體格式(JSON、XML等)進?解析。request.body返回bytes類型。
五、請求頭
可以通過request.META屬性獲取請求頭headers中的數據,request.META為字典類型。
常見的請求頭:
CONTENT_LENGTH– The length of the request body (as a string). CONTENT_TYPE– The MIME type of the request body. HTTP_ACCEPT– Acceptable content types for the response. HTTP_ACCEPT_ENCODING– Acceptable encodings for the response. HTTP_ACCEPT_LANGUAGE– Acceptable languages for the response. HTTP_HOST– The HTTP Host header sent by the client. HTTP_REFERER– The referring page, if any. HTTP_USER_AGENT– The client’s user-agent string.QUERY_STRING– The query string, as a single (unparsed) string. REMOTE_ADDR– The IP address of the client. REMOTE_HOST– The hostname of the client. REMOTE_USER– The user authenticated by the Web server, if any. REQUEST_METHOD– A string such as"GET"or"POST". SERVER_NAME– The hostname of the server. SERVER_PORT– The port of the server (as a string). def testview(request):print(request.META)print(request.META.get('HTTP_HOST')) return HttpResponse('hello')六、其他常?HttpRequest對象屬性
1、method:?個字符串,表示請求使?的HTTP?法,常?值包括:‘GET’、‘POST’。
user:請求的?戶對象。
path:?個字符串,表示請求的??的完整路徑,不包含域名和參數部分。
encoding:?個字符串,表示提交的數據的編碼?式。如果為None則表示使?瀏覽器的默認設置,?般為utf-8。這個屬性是可寫的,可以通過修改它來修改訪問表單數據使?的編碼,接下來對屬性的任何訪問將使?新的encoding值。
FILES:?個類似于字典的對象,包含所有的上傳?件。
<MultiValueDict: {‘a’: [<InMemoryUploadedFile: 新建 XLS 工作表.xls (application/vnd.ms-excel)>]}>
[16/Dec/2021 23:08:58] “POST /film/test/ HTTP/1.1” 200 5
總結
以上是生活随笔為你收集整理的【django】HttpRequest对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【django】HttpResponse
- 下一篇: UnboundLocalError: l