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

    一、Request

    在Rest Framework 传入视图的request对象已经不再是Django默认的HTTPResponse对象了,而是Rest Framework提供的Request类的对象了。

    但是Request会在接受到请求后会自动根据Content-type的数据类型进行解析为[QueryDict]对象,也就是说它会自动根据前端发送的数据格式进行解析。

    源码分析

    # from rest_framework.request import Request
    
    def __init__(self, request, parsers=None, authenticators=None,
                 negotiator=None, parser_context=None):
        # 先判断传入的request是不是原生的HttpResponse的对象,为了避免套娃
        assert isinstance(request, HttpRequest), (
            .format(request.__class__.__module__, request.__class__.__name__)
        )
    	# 二次封装request,将原生request作为drf request对象的 _request 属性
        self._request = request
        
        
    # 点拦截,当新request.的时候触发
    def __getattr__(self, attr):
        try:
            return getattr(self._request, attr)	# 通过反射,获取原生request对象,取出属性或方法
        except AttributeError:
            return self.__getattribute__(attr)
    

    常用属性

    request.data:返回解析后的请求体数据,不仅支持表单类型数据,也支持JSON数据

    request.query_params:和Django原生的request.GET相同,名字不一样而已

    @property
    def query_params(self):
        return self._request.GET	# 还是原来那个
    

    二、Response

    这是Rest Framework提供的响应类,它会把数据内容转换成符合前端的数据类型,它是根据请求头中的Accept来自动转换响应数据到对应格式。没有的话就是默认的,可以通过以下配置:

    REST_FRAMEWORK = {
        'DEFAULT_RENDERER_CLASSES': (  				# 默认响应渲染类
            'rest_framework.renderers.JSONRenderer',  			# json渲染器
            'rest_framework.renderers.BrowsableAPIRenderer',  	# 浏览API渲染器
        )
    }
    

    参数说明

    # from rest_framework.response import Response
    
    def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None):
    

    data:返回要被序列化的数据,字典

    status:状态码,默认200

    template:模板名称,可以自定义模版

    headers:响应头,可以往响应头放东西,就是一个字典

    content_type:响应的编码格式,(application/json或text/html)

    常用属性

    .data:传给response对象序列化后没有render的数据

    .status_code:状态码

    .content:render后的响应数据

    学习之旅
  • 相关阅读:
    matlab矩阵和矩阵操作基础
    [ZZ] MathType转化为LaTeX公式语言
    [综] 粒子滤波
    [综] Endnote怎么下载杂志格式?
    英语句子的连接方式
    [zz] postscript打印机以及ps文件转eps文件
    [zz]SCI投稿经验
    all, whole, entire, total, complete
    [转] 动态规划 最短路径
    [zz] Dynamic Time Warping 动态时间规整(弯折)
  • 原文地址:https://www.cnblogs.com/XiaoYang-sir/p/14974204.html
Copyright © 2011-2022 走看看