rest_framework之statusHTTP状态码

阅读: 评论:0

rest_framework之statusHTTP状态
Django Rest Framework有⼀个status.py的⽂件
通常在我们Django视图(views)中,HTTP状态码使⽤的是纯数字,像400,404,200,304等,并不是那么很好理解这些数字的含义,⽽且如果错误代码出错,很容易被忽略;但是在rest_framework中,REST框架为status模块中的每个状态码提供了更明晰的标识符。使⽤它们来代替纯数字的HTTP状态码是⼀个很不错的选择。
状态码的使⽤通常与rest_framework中的Response⼀块,我们先看看Response的语法定义:
class Response(SimpleTemplateResponse):
"""
An HttpResponse that allows its data to be rendered into
arbitrary media types.
"""
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
"""
Alters the init arguments slightly.
For example, drop 'template_name', and instead use 'data'.
Setting 'renderer' and 'media_type' will typically be deferred,
For example being set automatically by the `APIView`.
"""
super(Response, self).__init__(None, status=status)
if isinstance(data, Serializer):
msg = (
'You passed a Serializer instance as data, but '
'probably meant to pass serialized `.data` or '
'`.error`. representation.'
)
raise AssertionError(msg)
self.data = data
if headers:
for name, value in six.iteritems(headers):
self[name] = value
......
主要使⽤的参数data,status。其中status对应的就是我们要讲的status.py中定义的那些状态码。
爱农网from rest_framework import status
from sponse import Response
def example_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 st import APITestCase
class ExampleTestCase(APITestCase):
def test_url_root(self):
url = reverse('index')
response = (url)
self.assertTrue(status.is_success(response.status_code))
有关更详细的HTTP状态码信息,还可以参阅 和。
信息-1xx
此类状态代码表⽰临时响应。默认情况下,REST框架中没有使⽤1xx状态代码。
def is_informational(code):
return 100 <= code <= 199
HTTP_100_CONTINUE = 100      # 继续
HTTP_101_SWITCHING_PROTOCOLS = 101      # 交换协议
成功-2xx
此类状态代码表⽰已成功接收,理解和接受客户端的请求
def is_success(code):
return 200 <= code <= 299
HTTP_200_OK = 200    # 请求成功OK
HTTP_201_CREATED = 201      # 请求已完成,并导致创建新资源
HTTP_202_ACCEPTED = 202      # 请求已被接受处理,但处理尚未完成
HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203      # ⾮权威信息
HTTP_204_NO_CONTENT = 204      # ⽆内容
土壤中放线菌的分离
HTTP_205_RESET_CONTENT = 205      # 重置内容
HTTP_206_PARTIAL_CONTENT = 206      # 服务器已完成对资源的部分GET请求。部分内容
HTTP_207_MULTI_STATUS = 207      # 多状态;由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是⼀个XML消息,并且可能依照之前⼦请求数量的不同a356铝合金
重定向-3xx
此类状态代码指⽰⽤户代理需要采取进⼀步操作才能完成请求。
def is_redirect(code):
return 300 <= code <= 399
HTTP_300_MULTIPLE_CHOICES = 300      # 请求的资源具有多种选择
HTTP_301_MOVED_PERMANENTLY = 301      # 已为所请求的资源分配了⼀个新的永久URI;永久移动
HTTP_302_FOUND = 302      # 请求的⽹页被转移到⼀个,但客户访问仍继续通过原始URL
地址,重定向,新的URL会在response中的Location中返回,浏HTTP_303_SEE_OTHER = 303      # 可以在不同的URI下到对请求的响应,并且应该使⽤该资源上的GET⽅法检索。
HTTP_304_NOT_MODIFIED = 304      # 如果客户端已执⾏条件GET请求并允许访问,但⽂档尚未修改,则服务器应该响应此状态代码。少年军校活动被写入哪部法律?
HTTP_305_USE_PROXY = 305      # 使⽤代理。必须通过Location字段给出的代理访问所请求的资源。
HTTP_306_RESERVED = 306      # 306状态代码在规范的先前版本中使⽤,不再使⽤,并且代码被保留。
HTTP_307_TEMPORARY_REDIRECT = 307      # 临时重定向。请求的资源暂时驻留在不同的URI下。
客户端错误-4xx
4xx类状态代码适⽤于客户端似乎有错误的情况。除了在响应HEAD请求时,服务器应该包括⼀个实体,其中包含错误情况的解释,以及它
是暂时的还是永久的。
def is_client_error(code):
return 400 <= code <= 499
HTTP_400_BAD_REQUEST = 400      # 错误请求。由于语法格式错误,服务器⽆法理解请求。客户端不应该在没有修改的情况下重复请求。
HTTP_401_UNAUTHORIZED = 401      # 未经授权。该请求需要⽤户⾝份验证。
HTTP_402_PAYMENT_REQUIRED = 402      # 此代码保留供将来使⽤。
HTTP_403_FORBIDDEN = 403      # 服务器理解请求,但拒绝履⾏请求。
HTTP_404_NOT_FOUND = 404      # 服务器未到与Request-URI匹配的任何内容。
HTTP_405_METHOD_NOT_ALLOWED = 405      # 客户端请求中的⽅法被禁⽌
HTTP_406_NOT_ACCEPTABLE = 406      # 服务器⽆法根据客户端请求的内容特性完成请求
HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407      # 此代码类似于401(未授权),但表⽰客户端必须⾸先使⽤代理进⾏⾝份验证。
HTTP_408_REQUEST_TIMEOUT = 408      # 请求超时。客户端在服务器准备等待的时间内没有产⽣请求。
HTTP_409_CONFLICT = 409      # 由于与资源的当前状态冲突,⽆法完成请求。
HTTP_410_GONE = 410      # 请求的资源在服务器上不再可⽤,并且不知道转发地址。预计这种情况将被视为永久性的。⽹站设计⼈员可通过301代码指定资源的新HTTP_411_LENGTH_REQUIRED = 411    # 服务器⽆法处理客户端发送的不带Content-Length的请求信息
HTTP_412_PRECONDITION_FAILED = 412      # 在服务器上测试时,⼀个或多个请求标头字段中给出的前提条件被评估为false。
HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413      # 服务器拒绝处理请求,因为请求实体⼤于服务器能够处理的请求实体。
HTTP_414_REQUEST_URI_TOO_LONG = 414      # 请求的资源URL长于服务器允许的长度
HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415      # 服务器⽆法处理请求附带的媒体格式
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416      # 客户端请求的范围⽆效
HTTP_417_EXPECTATION_FAILED = 417      # 服务器不满⾜请求Expect头字段指定的期望值,如果是代理服务器,可能是下⼀级服务器不能满⾜请求长。
HTTP_422_UNPROCESSABLE_ENTITY = 422    # 不可处理的请求实体。请求格式正确,但是由于含有语义错误,⽆法响应。
HTTP_423_LOCKED = 423      # 锁定;当前资源被锁定。
HTTP_424_FAILED_DEPENDENCY = 424      # 错误接洽关系。由于之前的某个请求发⽣的错误,导致当前请求失败,例如 PROPPATCH。
HTTP_428_PRECONDITION_REQUIRED = 428      # 要求先决条件;先决条件是客户端发送 HTTP 请求时,如果想要请求能成功必须满⾜⼀些预设的条件。
HTTP_429_TOO_MANY_REQUESTS = 429      # 请求过多。
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431      # 请求头字段太⼤
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451      # 因法律原因⽽被官⽅审查。
服务器错误-5xx
以数字“5”开头的响应状态代码表⽰服务器知道它已经错误或⽆法执⾏请求的情况。除了在响应HEAD请求时,服务器应该包括⼀个实
体,其中包含错误情况的解释,以及它是暂时的还是永久的。
def is_server_error(code):
return 500 <= code <= 599
HTTP_500_INTERNAL_SERVER_ERROR = 500      # 服务器内部错误,⽆法完成请求
HTTP_501_NOT_IMPLEMENTED = 501      # 服务器不⽀持请求的功能,⽆法完成请求
HTTP_502_BAD_GATEWAY = 502      # 服务器在充当⽹关或代理时,在尝试完成请求时从其访问的上游服务器收到⽆效响应。
HTTP_503_SERVICE_UNAVAILABLE = 503      # 服务不可⽤;由于服务器的临时过载或维护,服务器当前⽆法处理请求。⼀般为暂时性的。
HTTP_504_GATEWAY_TIMEOUT = 504      # 作为⽹关或代理服务器,服务器没有收到来⾃URI指定
的上游服务器的及时响应(例如HTTP,FTP,LDAP)或尝试完HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505      # 服务器不⽀持或拒绝⽀持请求消息中使⽤的HTTP协议版本。
HTTP_507_INSUFFICIENT_STORAGE = 507      # 存储空间不⾜
宝宝照片征集HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511      # ⽹络认证请求;如果你频繁使⽤笔记本和智能⼿机,你可能会注意到⼤量的公⽤ WIFI 服务要求
婚恋问题
辅助助⼿
以下辅助函数可⽤于标识响应代码的类别。
is_informational()  # 1xx
is_success()        # 2xx
is_redirect()      # 3xx
is_client_error()  # 4xx
is_server_error()  # 5xx 参考:

本文发布于:2023-06-27 21:21:37,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/138507.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   服务器   代码   状态   错误   客户端
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图