[20200727NOIP提高組模擬T2]走路
阿新 • • 發佈:2020-07-27
一. 請求#
Copyfrom rest_framework.request import Request
class 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)
# 請求物件: request.data 前端以三種編碼方式傳入的資料,都可以取出來
# 請求物件: request.query_params與Django標準的request.GET相同,只是更換了更正確的名稱而已。
二. 響應#
1. 引數介紹#
Copyfrom rest_framework.response import Response
class Response:
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None) :
"""
:param data: 你要返回的資料,字典
:param status: 返回的狀態碼,預設是200,
from rest_framework import status # 在這個路徑下, 它把所有使用到的狀態碼都定義成了常量
:param template_name: 渲染的模板名字(自定製模板),不需要了解
:param headers: 響應頭,可以往響應頭放東西,就是一個字典
:param content_type: 響應的編碼格式,application/json 和 text/html
"""
2. 控制返回響應格式瀏覽器響應成瀏覽器的格式#
postman響應成json格式,瀏覽器響應好看的頁面. 這都是通過配置實現的(預設配置)
Copy# 配置的載入執行順序: 先從自己類中找 -> 專案的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渲染器
)
}
3. 狀態碼#
為了方便設定狀態碼,REST framewrok在rest_framework.status
模組中提供了常用狀態碼常量。
匯入: from rest_framework import status
提示: 預設響應狀態碼200
1) 資訊告知 - 1xx#
CopyHTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS
2)成功 - 2xx#
CopyHTTP_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#
CopyHTTP_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#
CopyHTTP_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#
CopyHTTP_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