首页 > 其他分享 >drf之请求request与response

drf之请求request与response

时间:2023-04-24 11:35:45浏览次数:30  
标签:settings py request rest framework classes 格式 response drf

目录

Request可解析编码格式

request可以解析三种由前端传入的编码格式:JSONParser,FormParser,MultiPartParser
当有需要,只接收用户传入的文件,而不接收其它数据的时候,就可以定制传入的格式

  • drf的配置文件中默认就指定的可接收的三种格式的配置,如下:
DEFAULTS = {
   ...
   ...
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    ],
   ...
   ...

定制传入数据类型格式

方法一,使用parser_classes定制

此方法只是针对一个类,比较有针对性,且优先级最高

class TestView(APIView):
    # 需要导入三种数据格式
    from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
    # 定义一个列表,列表中的内容为可以使用数据格式,这里只允许JSON格式数据
    parser_classes = [JSONParser,]
    def post(self, request):
        print(request.data)
        print(type(request.data))
        return Response({'code': 'success'})

如图,可以看到导入的格式为非指定格式会报错

方法二,使用settings.py配置

此方法为全局配置,优先级低于在类中配置parser_classes方法

在rest_framework的settings.py中的最顶部可以看到一个注释,大概就是说明如果想在自己的项目中使用配置的话,需要在自己项目的settings.py中添加下面的内容

settings.py中配置

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',       # 我只配置了JSON解析,所以前端在传入其他数据格式时,会报错。
        # 'rest_framework.parsers.FormParser',
        # 'rest_framework.parsers.MultiPartParser',
    ],
}

优先级说明

  1. 类中的parser_classes
  2. settings.py中的配置
  3. REST_FRAMEWORK中的settings.py中的配置
    以上三个的优先级为 1 > 2 > 3
    也就是,当在类中定义了parser_classes,在settings.py中也定义了REST_FRAMEWORK配置,那么,系统会走parser_classes,不会再走settings.py中的配置了。

Response

Response有两种返回方法,JSONRenderer和TemplateHTMLRenderer
优先级高

INSTALLED_APPS = [
    ...
    'rest_framework'
]

方法一,在类中定义Response返回格式

class TestView(APIView):
    # 导入相关包
    from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer
    # 定义返回的数据格式
    renderer_classes = [JSONRenderer, ]

    def get(self, request):
        return Response({'code': 'success'})

方法二,在settings.py中定义返回格式

在rest_framework的settings.py中的最顶部可以看到一个注释,大概就是说明如果想在自己的项目中使用配置的话,需要在自己项目的settings.py中添加相关配置
优先级低

REST_FRAMEWORK = {
    ...
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.TemplateHTMLRenderer',
}

优先级说明

  1. 类中的renderer_classes
  2. settings.py中的配置
  3. REST_FRAMEWORK中的settings.py中的配置
    以上三个的优先级为 1 > 2 > 3
    也就是,当在类中定义了renderer_classes,在settings.py中也定义了REST_FRAMEWORK配置,那么,系统会走renderer_classes,不会再走settings.py中的配置了。

Response init可以传入的参数

def __init__(self,
    data=None,
    status=None,
    template_name=None,
    headers=None,
    exception=False,
    content_type=None)
  • data

    • data中的内容可以是“字典,列表,字符串”三种格式,会把序列化后的内容返回给前端。
  • status

    • http的响应状态码,默认是200,可以通过下面方法修改
    • drf已将所有的http响应状态码全部重写,并且所有的响应状态码是常量
from rest_framework import status
return Response({'code': 'success'}, status=status.HTTP_200_OK)
  • template_name

    • 可以修改响应模版的样式,一般用不到
  • headers响应头

    • 原生django在响应头中添加定制化内容:
# 四件套 render,redirect,HttpResponse,JsonResponse
obj = HttpResponse('dddd')
obj['定制响应头的键'] = '定制响应头的值'
return obj
- drj定制响应头
return Response({'code': 'success'}, headers={'定制响应头的键':'定制响应头的值'})
  • content_type 响应编码格式,一般不动

标签:settings,py,request,rest,framework,classes,格式,response,drf
From: https://www.cnblogs.com/smyz/p/17347079.html

相关文章

  • 请求处理类 yii\web\Request
    $request=Yii::$app->request;//请求对象//$request->enableCsrfValidation=false;//取消CSRF验证$resolve=$request->resolve();//请求拆分$getHeaders=$request->getHeaders();//请求头集合$getMethod=$request->getMethod(......
  • @RequestHeader注解:获取请求头参数
    1.前言SpringMVC提供了@RequestHeader注解,其作用是将请求头中的参数值映射到控制器的参数中。常用属性如下:name:header值被绑定到的参数名称(Thenameoftherequestheadertobindto)。只有此属性时,可以省略name,简写为@RequestHeader("User-Agent")。required:Boolean类型,......
  • request getContextPath() getServletPath()[转的]
    项目名zhangyulonghttp://localhost:8080/zhangyulong/main/index.jsprequest.getContextPath()得到:/zhangyulongrequest.getServletPath()得到:/main/index.jsprequest.getRequestURI()得到:/zhangyulong/main/index.jsprequest.getRealPath("/")得到:F:......
  • KEIL5--Error: L6915E: Library reports error: __use_no_semihosting was requested
    __use_no_semihostingwasrequested:要求不使用半主机模式。 比较简单的一个解决方法就是点击“魔术棒”,在Target标签下有个UseMicroLIB,勾选UseMicroLIB,再编译就不会报错了。”Use MicroLIB”,这是KEIL自带的一个简易的库,使用Use MicroLIB微库不需要强调不使用半主机(nos......
  • drf之ModelSerializer
    目录简介语法示例使用Meta进行定义在Meta类外进行定义简介与表做强关联,之后不需要再写create与update函数了官网:https://www.django-rest-framework.org/api-guide/serializers/语法有多种写法,局部钩子与全局钩子是一样的class类名(serializers.ModelSerializer)#......
  • DRF的filter组件
    DRF的Filter组件如果某个API需要传递一些条件进行搜索,其实就在是URL后面通过GET传参即可,例如:/api/users?age=19&category=12在drf中filter组件可以支持条件搜索。1.自定义filter#models.pyfromdjango.dbimportmodelsclassRole(models.Model):"""角色表"""......
  • 【win10】requests出现InsecureRequestWarning
    1、问题   使用Python3 requests发送HTTPS请求,verify=False已经关闭认证情况下,控制台会输出以下warning  2、处理importurllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)  参考链接:https://blog.csdn.net/qq_38741986/article......
  • axios response 返回数据,正则匹配替换里面文字,注意返回的数据可能多层嵌套的
    在做项目招标时,新切换个分支,用来竞标,大体流程类似,但其中有企业字段需要替换一个个页面替换也很麻烦,从接口返回数据上想想办法!tips:返回的数据格式,各种类型,各种嵌套的可能性都有;functionreplaceData(data){if(typeofdata==='string'){//使用正则表达式将'app......
  • Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本
    配置文件介绍SECRET_KEY='0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a'#盐DEBUG=True#调试模式,等项目上线的时候,改成False#配置数据库DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3',#默认是自......
  • Response对象-响应字符数据
    Response响应数据1.response将字符数据返回到浏览器需要两步:1.通过response对象获取字符输出流PrintWriterwriter=resp.getWriter();2.通过字符输出流写数据:writer.writer(“aaa”);案例浏览器中打印出字符/***响应字符数据:设置字符数据的响应体*/@WebServle......