简介
直接在响应中使用裸状态码并不推荐。REST framework 包含一组命名常量,可以提高代码的可读性。
from rest_framework import status
from rest_framework.response import Response
def empty_view(self):
content = {'please move along': 'nothing to see here'}
return Response(content, status=status.HTTP_404_NOT_FOUND)status 模块中包含的完整 HTTP 状态码如下。
该模块还包含一些用于测试状态码是否在特定范围内的辅助函数。
from rest_framework import status
from rest_framework.test import APITestCase
class ExampleTestCase(APITestCase):
def test_url_root(self):
url = reverse('index')
response = self.client.get(url)
self.assertTrue(status.is_success(response.status_code))关于 HTTP 状态码的正确使用,可参考 RFC 2616 和 RFC 6585。
信息性 - 1xx
这类状态码表示临时响应。REST framework 默认不使用任何 1xx 状态码。
- HTTP_100_CONTINUE
- HTTP_101_SWITCHING_PROTOCOLS
- HTTP_102_PROCESSING
- HTTP_103_EARLY_HINTS
成功 - 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
- HTTP_208_ALREADY_REPORTED
- HTTP_226_IM_USED
重定向 - 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
- HTTP_308_PERMANENT_REDIRECT
客户端错误 - 4xx
4xx 类状态码适用于客户端似乎出现错误的情况。除非是对 HEAD 请求做出响应,否则服务器应包含一个实体,解释错误情况,以及它是临时还是永久状态。
- 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_421_MISDIRECTED_REQUEST
- HTTP_422_UNPROCESSABLE_ENTITY
- HTTP_423_LOCKED
- HTTP_424_FAILED_DEPENDENCY
- HTTP_425_TOO_EARLY
- HTTP_426_UPGRADE_REQUIRED
- HTTP_428_PRECONDITION_REQUIRED
- HTTP_429_TOO_MANY_REQUESTS
- HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
- HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS
服务器错误 - 5xx
以数字 "5" 开头的响应状态码表示服务器意识到自己出错或无法执行请求。除非是对 HEAD 请求做出响应,否则服务器应包含一个实体,解释错误情况,以及它是临时还是永久状态。
- 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_506_VARIANT_ALSO_NEGOTIATES
- HTTP_507_INSUFFICIENT_STORAGE
- HTTP_508_LOOP_DETECTED
- HTTP_509_BANDWIDTH_LIMIT_EXCEEDED
- HTTP_510_NOT_EXTENDED
- HTTP_511_NETWORK_AUTHENTICATION_REQUIRED
辅助函数
以下是可用于识别响应码类别的辅助函数。
- is_informational() # 1xx
- is_success() # 2xx
- is_redirect() # 3xx
- is_client_error() # 4xx
- is_server_error() # 5xx
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。