12 請求與響應
阿新 • • 發佈:2021-12-23
# 請求物件 # from rest_framework.request import Request def __init__(self, request, parsers=None, authenticators=None, negotiator=None, parser_context=None): # 二次封裝request,將原生request作為drf request物件的 _request 屬性 self._request = request def __getattr__(self,item): return getattr(self._request,item) # 請求物件.data:前端post以三種編碼方式傳入的資料,都可以取出來 # 請求物件..query_params 與Django標準的request.GET相同,只是更換了更正確的名稱而已。
# 屬性: request.data request.query_params request._request 原來的request request.method --->就是使用了原來的request的method 通過重寫 __getattr__魔法方法實現的 # 預設情況下post提交資料,可以三種方式(form-data,urlencoded,json),都能處理 # 我們只允許介面接收json格式,其他格式不支援 # 方式一:全域性配置,在配置檔案中 REST_FRAMEWORK = { # 預設能夠解析的編碼方式 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', # json的 # 'rest_framework.parsers.FormParser', # urlencoded的 # 'rest_framework.parsers.MultiPartParser' # form-data的 ) } #方式二: 區域性配置:(檢視類) class PublishView(APIView): parser_classes = [FormParser,] # 優先順序更高 # 優先順序:先用檢視類自己的,再用配置檔案---》drf的預設配置
#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,
-from rest_framework import status在這個路徑下,它把所有使用到的狀態碼都定義成了常量
#template_name 渲染的模板名字(自定製模板),不需要了解
#headers:響應頭,可以往響應頭放東西,就是一個字典
#content_type:響應的編碼格式,application/json和text/html;
# 瀏覽器響應成瀏覽器的格式,postman響應成json格式,通過配置實現的(預設配置)
#不管是postman還是瀏覽器,都返回json格式資料
# drf有預設的配置檔案---》先從專案的setting中找,找不到,採用預設的
# drf的配置資訊,先從自己類中找--》專案的setting中找---》預設的找
-區域性使用:對某個檢視類有效
-在檢視類中寫如下
from rest_framework.renderers import JSONRenderer
renderer_classes=[JSONRenderer,]
-全域性使用:全域性的檢視類,所有請求,都有效
-在setting.py中加入如下
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 預設響應渲染類
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 瀏覽API渲染器
)
}
# 屬性: data:返回給前端的資料,可以是字典,列表,字串 status:響應狀態碼,1xx 2xx 3xx 4xx 5xx template_name : 不用,替換模板 headers=None :響應頭 #預設用瀏覽器可以看到頁面,用postman可以看到jon #只能顯示json # 方式一:全域性配置,在配置檔案中 REST_FRAMEWORK = { # 使用的渲染類 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', # 'rest_framework.renderers.BrowsableAPIRenderer', ) } # 區域性配置:(檢視類) class PublishView(APIView): renderer_classes = [JSONRenderer,] # 優先順序:先用檢視類自己的,再用配置檔案---》drf的預設配置