#經常使用屬性 -data :前端以post請求提交的數據都在它中 -FILES :前端提交的文件 -query_params:就是原來的request.GET -重寫了 __getattr__ -使用新的request.method其實取得就是原生request.method(經過反射實現)
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
渲染器處理data
。json
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