DRF请求与响应

目录

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对象中的方法

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

Response类

实例化参数

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

 请求编码与相应编码

能够解析的请求编码

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

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

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

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

"""
Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
For example your project's `settings.py` file might look like this:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.TemplateHTMLRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
}
"""

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

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        # 'rest_framework.parsers.FormParser',
        # 'rest_framework.parsers.MultiPartParser',
    ],
}

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

class Test(APIView):
    from rest_framework.parsers import JSONParser, MultiPartParser, FormParser
    parser_classes = [JSONParser]

    def post(self, request):
        return Response(request.data)

 

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

相应编码

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

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

方式一:配置文件中配置

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

方式二:在视图类中配置

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值