• 3 drf请求与响应


    一. 请求

    from 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. 参数介绍

    from 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格式,浏览器响应好看的页面. 这都是通过配置实现的(默认配置)

    # 配置的加载执行顺序: 先从自己类中找 -> 项目的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

    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

    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
    
  • 相关阅读:
    JSON数据格式
    段寄存器
    进程 PCB 进程挂起
    python3:文件读写+with open as语句(转)
    Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案
    intelx86为何从0xFFFF0处执行
    Linux内核调度分析(转,侵删)
    调度器简介,以及Linux的调度策略(转)
    nm命令
    Vim文本编辑器中常用的一些命令
  • 原文地址:https://www.cnblogs.com/wait59/p/13976441.html
Copyright © 2020-2023  润新知