zoukankan      html  css  js  c++  java
  • drf请求与响应

    一. 请求#

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

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

    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#

    Copy
    HTTP_100_CONTINUE
    HTTP_101_SWITCHING_PROTOCOLS
    

    2)成功 - 2xx#

    Copy
    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#

    Copy
    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#

    Copy
    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#

    Copy
    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_507_INSUFFICIENT_STORAGE
    HTTP_511_NETWORK_AUTHENTICATION_REQUIRED
    
     
     
  • 相关阅读:
    JDBC连接各种数据库的字符串,就是不好记
    HTTP协议详解
    gson 简要使用
    maven 仓库地址:
    HTTP请求头详解
    HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
    如何终止java线程
    oracle 函数大全及运算符
    Java集合的线程安全用法
    哈希算法快速查表的原理
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/13386321.html
Copyright © 2011-2022 走看看