rest_framework下的request類原始碼分析:
)self._request = request #原生request
def __getattr__(self, attr):
"""通過反射,將原生request物件,以及屬性和方法取出
"""try:
return getattr(self._request, attr)
except attributeerror:
return self.__getattribute__(attr)
'''通過@property裝飾器將data方法封裝成屬性
data方法:它是乙個字典,post請求不管使用什麼編碼,傳過來的資料,都在request.data
'''@property
def data(self):
if not _hasattr(self, '_full_data'):
self._load_data_and_files()
return self._full_data
'''get請求的資料都在這裡取
'''@property
def query_params(self):
"""more semantically correct name for request.get.
"""return self._request.get
'''存檔案資料
'''
@property
def files(self):
if not _hasattr(self, '_files'):
self._load_data_and_files()
return self._files總結:1、將原生的request物件封裝成 drf request物件的_request 屬性
2、請求物件.data(request.data):可以把前端傳過來的資料(三種編碼方式)全部取出來
3、request.query_params 與django標準的request.get等價。
注意:請求頭是存放在request.meta中,獲取請求頭的資訊可以從該屬性中獲取
rest_framework下的response原始碼:
#from rest_framework.response import response
def __init__(self, data=none, status=none,
template_name=none, headers=none,
exception=false, content_type=none):
#data:你要返回的資料,字典
#status:返回的狀態碼,預設是200,#template_name 渲染的模板名字(自定製模板),不需要了解
#headers:響應頭,可以往響應頭放東西,就是乙個字典
注意:from rest_framework import status
在這個status這個模組下,它把所有使用到的狀態碼都定義成了常量
響應資料資料格式配置。-區域性使用:對某個檢視類有效
-在檢視類中寫如下
from rest_framework.renderers import jsonrenderer
renderer_classes=[jsonrenderer,]-全域性使用:全域性的檢視類,所有請求,都有效
-在setting.py中加入如下
rest_framework =
注意:drf本身預設的配置檔案,但是一般配置檔案都是先從專案的settings檔案中中,找不到,採用預設的
drf的配置資訊,則是先從自己類找那個找,找不到再從專案的settings中找,再找不到,再去預設找
from rest_framework.response import response
class apiresponse(response):
def __init__(self,code=100,msg='成功',data=none,status=none,headers=none,**kwargs):
dic =
if data:
dic =
dic.update(kwargs)
super().__init__(data=dic, status=status,headers=headers)
請求和響應
1 response物件的字元輸入流在編碼時候,採用的是iso 8859 1的編碼表 在httpservletresponse介面中,有setcharacterencoding utf 8 方法來設定字元編碼 2 瀏覽器的解碼方式是gb2312,而我們使用的編碼是 utf 8 因此亂碼。sethea...
請求和響應
如果你正在做基於rest的web服務,你最好忽略request.post和request.get rest framework的request類擴充套件了標準的httprequest,新增對rest framework的靈活請求解析和請求身份驗證的支援。rest framework的請求物件提供靈活...
請求和響應
post方式請求 request.setcharacterencoding utf 8 response.setcontenttype text html charset utf 8 get方式請求 get方式請求的正文是在位址列中,在tomcat8.5版本以後,tomacat伺服器已經幫我們解決了...