首页 > 其他分享 >drf : 请求(Request)与响应(Response),全局设置和局部设置drf的默认配置项。

drf : 请求(Request)与响应(Response),全局设置和局部设置drf的默认配置项。

时间:2024-03-25 11:23:06浏览次数:25  
标签:ser Request framework 设置 data Response drf

请求(Request)与响应(Response)

请求(Request),当次的HTTP响应请求到Django中被封装成python中的对象

  • request.data - POST, PUT请求的数据
  • request.query_params -GET请求的数据
    REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。

REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析为类字典[QueryDict]对象保存到Request对象中。

Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。

无论前端发送的哪种格式的数据,我们都可以以统一的方式读取数据。

响应(Response),主要:data(HTTP的响应体),status(状态码),headers(HTTP的响应头)

rest_framework.response.Response

继承关系 ---> SimpleTemplateResponse ---> django的HttpResponse

构造方式

Response(data, status=None, template_name=None, headers=None, content_type=None)

data 数据不要是render处理之后的数据,只需传递python的内建类型数据即可,REST framework会使用renderer渲染器处理data。

data 不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用Serializer序列化器序列化处理后(转为了Python字典类型)再传递给data参数。

参数说明:

  • data: 为响应准备的序列化处理后的数据;
  • status: 状态码,默认200;
  • template_name: 模板名称,在浏览器访问看达到的模板,如果使用HTMLRenderer 时需指明;
  • headers: 用于存放响应头信息的字典;
  • content_type: 响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数。

可以在rest_framework.settings查找所有的drf默认配置项

全局配置,在项目的settings.py 配置。
# 1. 后期 drf 的所有配置都写在这个字典中
# 2. drf有个默认配置文件(drf源码的--setting.py),如果没有写项目的配置文件,则使用内置的,写了优先使用项目的。
# 3. 返回样式的配置,一般不配置。
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (  # 默认响应渲染类
        'rest_framework.renderers.JSONRenderer',  # json渲染器
        'rest_framework.renderers.BrowsableAPIRenderer',  # 浏览API渲染器
    )
}

局部配置,只针对某个视图函数。

导入模块:

from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
class BookView(APIView):
  	# 局部配置。尽管全局配置了,优先使用局部的。
    renderer_classes = [JSONRenderer]

    def post(self, request):
        print(request)
        ser = BookSerializers(data=request.data)
        if ser.is_valid():
            ser.save()
        return Response(ser.data)

    def get(self, request):
        book_list = Books.objects.all()
        # many=True 代表序列化多条数据
        ser = BookSerializers(instance=book_list, many=True)
        """
        <class 'rest_framework.serializers.ListSerializer'>
        ser 是ListSerializer的对象
        """
        print(type(ser))
        response = {'code': 100, 'msg': '查询成功', 'result': ser.data}
        #
        return Response(response, status=status.HTTP_202_ACCEPTED, headers={'name': 'junjie'})

标签:ser,Request,framework,设置,data,Response,drf
From: https://www.cnblogs.com/HeroZhang/p/18093995

相关文章

  • Django 字段类型,字段参数,以及在drf中的使用。
    字段类型#models中CharField,DecimalField.....#记住的: CharFieldIntegerFieldFloatFieldDecimalFieldDateTimeFieldDateField#知道--》models中没有的---》反序列化的时候,前端传入的{name:lqz,age:19,hobby:[篮球,足球],wife:{name:lyf,age:38}} ListF......
  • drf : 模型类序列化器 以及扩展用法。
    模型类序列化器:serializer的升级。注意,此时表模型自身的校验规则也将映射过来。只需要在serializers中写一个模型类序列化器即可。serializer.py#模型类序列化器#此序列化类和表模型有对应关系,映射classPublishModelSerializer(serializers.ModelSerializer):class......
  • drf : source,定制序列化字段以及反序列化新增。局部钩子(validate_字段名),全局钩子(va
    source,SerializerMethodField,局部钩子,全局钩子serialzer.py:source用处对应字段:起别名,用处2对应方法:在表模型中定义一个方法,source可以与其关联用处3对应方法:可以当做字段第三种方法的扩展用法:使用程度高。model.pyfromdjango.dbimportmodels#Createyourmo......
  • vivado设置为中文
    方法步骤第一步1.当我们进入到VisualStudioCode,中之后,你可以看到该页面是英文来显示的,那么我们可以点击左侧的箭头所指的图标。第二步2.接着进入到页面中,在搜索框中输入【简体中文】,接着按下键盘上的回车键进行搜索,搜索出来的简体中文,点击【install】按钮进行安装。......
  • drf : APIView执行流程和新的Request源码。APIView和Request对象分析
    DRF基本使用及执行流程分析1.继承APIView使用2.APIView的执行流程路由:path('Book1',view.Book.as_view())-->第二个参数是函数的内存地址-->APIView的as_view的执行结果-->本质还是用了View类的as_viewn内的viewc包函数,去掉了csrf的认证。-->当请求来......
  • drf: 序列化和反序列化, Django Rest_Framework 介绍也安装及使用。
    序列化与返序列化序列化:将python中的数据类型转换成指定数据类型发送给别人返序列化:接收别人发送过来的数据,返序列化成我们所需要的格式。eg::前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。DjangoR......
  • drf : web应用模式,RESTful API规范,接口测试工具:Postman
    drf:web应用模式,RESTfulAPI规范,接口测试工具:PostmanWeb应用模式前后端不分离前后端分离API接口前后端交互的媒介WebAPI接口和一般的url链接还是有区别的,WebAPI接口简单概括有下面四大特点。url:长得像返回数据的url链接https://api.map.baidu.com/place/v2/search......
  • 等保-linux-三权分立账号设置
    1.创建三权账号#新建系统管理员useraddsysadminpasswdsysadmin#新建安全管理员useraddsecadminpasswdsecadmin#新建审计管理员useraddauditadminpasswdauditadmin2.修改visudo配置visudo#系统管理员Cmnd_AliasSOFTWARE=/bin/rpm,/usr/bin/up2date,/usr/bin/yumCmn......
  • linux时间设置
    1.检查当前时区date---显示当前系统时间和日期,格式包括星期几、月份、日期、时间和时区。ortimedatectl---更多的时间和日期管理功能,包括显示当前时间和日期、时区信息、系统启动时间等。2.设置时区为上海/北京时间:sudotimedatectlset-timezoneAsia/Shanghai或者......
  • AD域服务和文件共享设置
    1.先把S端和C端ping通ip 2.S端安装域控服务 3.S端域控升级 4.C端加入S端设置的域林  5.S端设置user  6.设置李四和张三权限  7.登录张三并测试权限   8.在S端查看张三写入 9.登录李四并测试权限   10.这里就已经做完 发现李四......