drf—— drf的請求與響應

1、Request

#經常使用屬性
    -data :前端以post請求提交的數據都在它中
    -FILES :前端提交的文件
    -query_params:就是原來的request.GET
    -重寫了 __getattr__
        -使用新的request.method其實取得就是原生request.method(經過反射實現)

2、Response

1.全局&局部配置模板的顯示方式前端

rest_framework.response.Response

# 經過配置,選擇默認模板的顯示形式(瀏覽器方式,json方式)
    -配置文件方式(全局)
        -若是沒有配置,默認有瀏覽器和json
            -drf有默認配置文件
            from rest_framework.settings import DEFAULTS
            REST_FRAMEWORK = {
            'DEFAULT_RENDERER_CLASSES': (  # 默認響應渲染類
                'rest_framework.renderers.JSONRenderer',  # json渲染器
                'rest_framework.renderers.BrowsableAPIRenderer',  # 瀏覽API渲染器
            )
            }
    -在視圖類中配置(局部)
        -粒度更小
        -class BookDetail(APIView):
            renderer_classes=[JSONRenderer,]

2.Response構造python

源碼內構造方式: Response(data, status=None, template_name=None, headers=None, content_type=None)

####

data數據不要是render處理以後的數據,只需傳遞python的內建類型數據便可,REST framework會使用renderer渲染器處理datajson

data不能是複雜結構的數據,如Django的模型類對象,對於這樣的數據咱們能夠使用Serializer序列化器序列化處理後(轉爲了Python字典類型)再傳遞給data參數。瀏覽器

參數說明:服務器

  • data: 爲響應準備的序列化處理後的數據;
  • status: 狀態碼,默認200;
  • template_name: 模板名稱,若是使用HTMLRenderer 時需指明;
  • headers: 用於存放響應頭信息的字典;
  • content_type: 響應數據的Content-Type,一般此參數無需傳遞,REST framework會根據前端所需類型數據來設置該參數。

3.經常使用屬性post

#經常使用屬性

    -from rest_framework.response import Response
    -data:響應的字典
    -status:http響應的狀態碼
        -drf提供給你了全部的狀態碼,以及它的意思
        from rest_framework.status import HTTP_201_CREATED
    -template_name:模板名字(通常不動),瞭解
    -headers:響應頭,字典
    -content_type:響應的編碼方式,瞭解
    
    
 # 本身封裝一個Response對象
      class CommonResponse:
        def __init__(self):
            self.code=100
            self.msg=''
        @property
        def get_dic(self):
            return self.__dict__
# 本身封裝一個response,繼承drf的Response

4.狀態碼編碼

爲了方便設置狀態碼,REST framewrok在rest_framework.status模塊中提供了經常使用狀態碼常量spa

#1)信息告知 - 1xx

HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS

#2)成功 - 2xx
HTTP_200_OK
HTTP_201_CREATED
HTTP_202_ACCEPTED
HTTP_203_NON_AUTHORITATIVE_INFORMATION
HTTP_204_NO_CONTENT
HTTP_205_RESET_CONTENT
HTTP_206_PARTIAL_CONTENT
HTTP_207_MULTI_STATUS

#3)重定向 - 3xx
HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT

#4)客戶端錯誤 - 4xx
HTTP_400_BAD_REQUEST
HTTP_401_UNAUTHORIZED
HTTP_402_PAYMENT_REQUIRED
HTTP_403_FORBIDDEN
HTTP_404_NOT_FOUND
HTTP_405_METHOD_NOT_ALLOWED
HTTP_406_NOT_ACCEPTABLE
HTTP_407_PROXY_AUTHENTICATION_REQUIRED
HTTP_408_REQUEST_TIMEOUT
HTTP_409_CONFLICT
HTTP_410_GONE
HTTP_411_LENGTH_REQUIRED
HTTP_412_PRECONDITION_FAILED
HTTP_413_REQUEST_ENTITY_TOO_LARGE
HTTP_414_REQUEST_URI_TOO_LONG
HTTP_415_UNSUPPORTED_MEDIA_TYPE
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE
HTTP_417_EXPECTATION_FAILED
HTTP_422_UNPROCESSABLE_ENTITY
HTTP_423_LOCKED
HTTP_424_FAILED_DEPENDENCY
HTTP_428_PRECONDITION_REQUIRED
HTTP_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS

#5)服務器錯誤 - 5xx
HTTP_500_INTERNAL_SERVER_ERROR
HTTP_501_NOT_IMPLEMENTED
HTTP_502_BAD_GATEWAY
HTTP_503_SERVICE_UNAVAILABLE
HTTP_504_GATEWAY_TIMEOUT
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_507_INSUFFICIENT_STORAGE
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED
相關文章
相關標籤/搜索