1. 程式人生 > 其它 >12 請求與響應

12 請求與響應

1.請求Request


# 請求物件
# 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的預設配置

2.響應 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,
    -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的預設配置