rest_frameworkのstatus HTTPステータスコード

19861 ワード

Django Rest Frameworkにはstatusがあるpyのファイル
通常、Djangoビュー(views)では、HTTPステータスコードは純数字を使用しており、40044200304など、これらの数字の意味をそんなによく理解していないし、エラーコードが間違っていると無視されやすい.でも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
        self.template_name = template_name
        self.exception = exception
        self.content_type = content_type

        if headers:
            for name, value in six.iteritems(headers):
                self[name] = value
......

主に使用するパラメータdata,status.その中でstatusは私たちが言うstatusに対応しています.pyで定義されているステータスコード.
from rest_framework import status
from rest_framework.response 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 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を参照してもよい.
情報-1 xx
このようなステータスコードは、一時的な応答を表します.デフォルトでは、RESTフレームワークでは1 xxステータスコードは使用されません.
def is_informational(code):
    return 100 <= code <= 199


HTTP_100_CONTINUE = 100      #   
HTTP_101_SWITCHING_PROTOCOLS = 101      #     

成功-2 xx
このようなステータスコードは、クライアントのリクエストが正常に受信され、理解され、受信されたことを示します.
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  ,                ,            。

リダイレクト-3 xx
このようなステータスコードは、要求を完了するには、ユーザーエージェントがさらなる操作を行う必要があることを示します.
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   ,         URL    Request。
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 。

クライアントエラー-4 xx
4 xxクラスステータスコードは、クライアントにエラーがあるような場合に適用されます.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      #            。

サーバエラー-5 xx
数値「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)                  (  DNS)  。
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

これにより,これらの状態コードの認識や誤りが発生した場合の判断が大幅に容易になる.