• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

DRF请求和响应

武飞扬头像
Yietong309
帮助1

目录

Request类

常用参数

Response类

 请求编码与相应编码

相应编码


Request类

经过rest framwork 传入视图函数的request已经不是原来的request了, 而是Request的类产生的对象request.

rest framwork 提供了Parser解析器, 在收到请求后会根据Content-Type知名的请求数据类型,如JSON,表单等. 将请求数据进行parse解析, 解析为类字典[QueryDict]对象保存到Request对象中.

Request对象的数据是自动根据前端发送数据的格式进行讲解细致和的结果

常用参数

data

POST,PUT,PATCH请求方式解析后的数据,, (原生django的PUT请求再request.POST中取不到)

query_params

与原生的GET一样. 

其他的方法和原来的request使用方法一致.

底层原理: 在Request实例化对象时, self._request=request, 将原来的request对象给了Request的对象, 又在Request类中定义了__getattr__魔法方法, 挡在视图函数中获取request对象的属性和方法时, 找不到就会触发魔法方法的执行, 利用反射获取原来的request对象中的方法

  1.  
    def __getattr__(self, attr):
  2.  
    """
  3.  
    If an attribute does not exist on this instance, then we also attempt
  4.  
    to proxy it to the underlying HttpRequest object.
  5.  
    """
  6.  
    try:
  7.  
    return getattr(self._request, attr)
  8.  
    except AttributeError:
  9.  
    return self.__getattribute__(attr)

Response类

实例化参数

  • data(列表胡总和字典, 序列化成json字符串返回给前端)
  • status(响应状态码, 默认是200: from rest_framework.status import HTTP_200_OK)
  • headers(响应头, 以字典的形式返回给前端)
  • content_type(乡音编码格式)
  • template_name(指定模板)
  1.  
    class Test(APIView):
  2.  
    def get(self, request):
  3.  
    return Response(data={}, status=status.HTTP_201_CREATED, headers={'name': 'yietong'})

学新通

 请求编码与相应编码

能够解析的请求编码

drf默认能够解析urlencoded, form-data,json

其实是通过配置文件配置的, 在rest_framwork包下的settings.py中

  1.  
    DEFAULTS = {
  2.  
    # Base API policies
  3.  
    'DEFAULT_PARSER_CLASSES': [
  4.  
    'rest_framework.parsers.JSONParser', # 可以解析json格式
  5.  
    'rest_framework.parsers.FormParser', # 可以解析urlencoded格式
  6.  
    'rest_framework.parsers.MultiPartParser' # 可以解析form-data格式
  7.  
    ],

 想在项目中配置REST_FRAMEWORK,需要像下边这样在项目配置文件中配置。

  1.  
    """
  2.  
    Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
  3.  
    For example your project's `settings.py` file might look like this:
  4.  
     
  5.  
    REST_FRAMEWORK = {
  6.  
    'DEFAULT_RENDERER_CLASSES': [
  7.  
    'rest_framework.renderers.JSONRenderer',
  8.  
    'rest_framework.renderers.TemplateHTMLRenderer',
  9.  
    ],
  10.  
    'DEFAULT_PARSER_CLASSES': [
  11.  
    'rest_framework.parsers.JSONParser',
  12.  
    'rest_framework.parsers.FormParser',
  13.  
    'rest_framework.parsers.MultiPartParser',
  14.  
    ],
  15.  
    }
  16.  
    """
学新通

如果想让视图函数只解析指定格式的方法:
方式一:
在项目的settings.py中配置REST_FRAMEWORK。

  1.  
    REST_FRAMEWORK = {
  2.  
    'DEFAULT_PARSER_CLASSES': [
  3.  
    'rest_framework.parsers.JSONParser',
  4.  
    # 'rest_framework.parsers.FormParser',
  5.  
    # 'rest_framework.parsers.MultiPartParser',
  6.  
    ],
  7.  
    }

方式二:
在视图类中定义parser_classes属性。

  1.  
    class Test(APIView):
  2.  
    from rest_framework.parsers import JSONParser, MultiPartParser, FormParser
  3.  
    parser_classes = [JSONParser]
  4.  
     
  5.  
    def post(self, request):
  6.  
    return Response(request.data)

学新通

学新通 

 总结:解析类的执行顺序,先执行视图类自己的,在执行项目配置文件中的,最后执行rest_framework里的配置文件。

相应编码

默认情况下,相应编码是根据客户端的类型而定的,浏览器访问的话相应编码就是text/html,postman的相应编码是application/json。

配置相应编码格式也是两种方式

方式一:配置文件中配置

  1.  
    'DEFAULT_RENDERER_CLASSES': [
  2.  
    'rest_framework.renderers.JSONRenderer', # 只能相应json格式数据
  3.  
    # 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器格式
  4.  
    ],

方式二:在视图类中配置

  1.  
    from rest_framework.renderers import JSONRenderer, BaseRenderer
  2.  
    renderer_classes = [BaseRenderer]

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgeifai
系列文章
更多 icon
同类精品
更多 icon
继续加载