DRF請求和響應,以及Response物件重新封裝

2021-10-10 09:01:11 字數 2675 閱讀 6264

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伺服器已經幫我們解決了...