知其然亦要知其所以然
views每個方法的參數都是request,那么問題來了,request為何物?
首先,幾乎每個方法都是取數據(無論是從數據庫,還是從第三方接口),然后進行一定的處理,之后傳給前端。而前端請求數據,就會向后端發送一個http請求,這個請求的請求路徑,經過urls,會調用url中指定的方法。此時django就會將HttpRequest對象作為第一個參數傳入此方法。故,request即為一個httpRequest對象。
然后,出現了一個新問題,httpRequest是什么,又含有什么屬性和方法?
- httpRequest類定義在django.http中
- httpRequest對象是由django自動創建的
常見屬性:
- HttpRequest.method 字符串類型,表示所用的http方法
- HttpRequest.content_type 指content_type頭解析的請求的MIME類型
- HttpRequest.content_params 指content_type標題中的 k/v參數字典
- HttpRequest.GET 此為一個字典一樣的對象,里面有get請求中的所有參數
- HttpRequest.POST 此亦為一個字典一樣的對象,里面有post請求表單中數據
- HttpRequest.COOKIES 此仍為一個字典一樣的對象,包含所有的cookie數據
- HttpRequest.session : SessionMiddleware中間件,可讀寫的,為一個字典一樣的對象,表示當前會話。我們要保存用戶狀態,回話過程等等,需要利用此中間件
- HttpRequest.user : AuthenticationsMiddleware中間件:表示當前登錄用戶的AUTH_USER_MODEL實例,若未登錄,賊user為AnonymousUser實例
QueryDict:
在HttpRequest 對象中,屬性 GET 和 POST 得到的都是 django.http.QueryDict 所創建的實例,此亦為一個類似於字典一樣的類。
經常用的方法為QueryDict.get(key,default) ,返回key對應的值,若對應多個值,則返回最后的值,若key不存在,則返回默認值。