首页 > 其他分享 >drf之请求与响应,drf之视图组件,2个视图基类

drf之请求与响应,drf之视图组件,2个视图基类

时间:2022-09-29 16:55:54浏览次数:59  
标签:res self request rest framework 视图 基类 drf

1.drf之请求与响应

在继承drf中的APIView时

Request

它的请求对象request就不是原来的那个request了(具体去看APIView源码分析),所以没钱请求的request都是一个新的对象,
这时我们便可以通过request.data取出全部数据,而原来的request是取不到request.data的,只能通过请求来看是取request.GET.get(k)或者request.POST.get(k)中的值且取不到put中的数据,
所以drf中的APIView是为了帮我们更好的拿到数据,其他的跟之前用起来一样,因为他们的底层都是继承了一个共同的父类View。
Response

 

在源码中有参数data,status,template_name,headers,content_typy(exception不看了)

其中data是将列表字典序列化之后以json的格式返回给前端(放在http响应的body中了)

status  响应状态码

template_name 就是前端模板

content_type 是用来响应前端返回的数据是什么类型的(有json,from/data,url类型)

drf能够解析的请求编码,响应编码

能够解析的请求编码和响应编码被放到drf中steeings的文件中了,这是drf的配置文件,我们可以在我们的项目中把其他模块配置文件中的值给写入到我们项目文件的配制文件底下,在这时这个数据就优先用我们配置文件底下的。

# drf配置中的源文件
DEFAULTS = { # Base API policies 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ], 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser' ] }

此时DEFAULT_PARSER_CLASSES的valve值就是前端返回给后端的格式只能是什么类型的,在项目的配制文件中加入代码接下来我们把json格式给注掉看下详情。

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',
    ],
}

 


就会出现不让传json格式的数据



接下来DEFAULT_RENDERER_CLASSES是前端显示的格式,我们把json格式注掉之后,在postman中就直接返回前端的代码,同样的道理,把rest_framework注掉以后在前端就会返回json格式的数据

    'DEFAULT_RENDERER_CLASSES': [
        # 'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.TemplateHTMLRenderer',

 

 

我们不仅仅可以在全局的设置里面修改这些配制,我们还可以在局部界面修改这些配置。这些与配置文件中都是一一对应的,一个不写,他就不会显示这种格式

from rest_framework.parsers import  JSONParser,FormParser,MultiPartParser
from rest_framework.renderers import JSONRenderer,TemplateHTMLRenderer


class TestView(APIView):
    parser_classes = [JSONParser, FormParser, MultiPartParser]
class Tes_tView(APIView):
    renderers_classes = [JSONRenderer, TemplateHTMLRenderer]

上述优先级是自己局部页面加的配置,然后自己项目配置中,最后drf配置,这样优先级来执行。

2.drf之视图组件

自己去了解继承,封装和多态

3.两个视图基类

我们五个接口中大部分代码重复,我们就可以用drf中的GenericAPIView给写到一起,然后在分发下去,这就是两个视图基类,可以理解为基于GenericAPIView写接口

class BookViews(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializers
    def get(self,request):
        book_list = self.get_queryset()
        res =BookSerializers(instance=book_list,many=True)
        return  Response(res.data)

    def post(self,request):
        res = self.get_serializer(data=request.data)
        if res.is_valid():
            res.save()
            return  Response({'code':201,'msg':'添加成功'})
        return Response({'code':201,'msg': res.errors})


class OneBookViews(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializers
    def get(self,request,pk):
        book_list = self.get_object()
        res =self.get_serializer(instance=book_list)
        return  Response(res.data)

    def put(self,request,pk):
        book_list = self.get_object()
        res = self.get_serializer(instance=book_list,data=request.data)
        if res.is_valid():
            res.save()
            return  Response({'code':201,'msg':'修改成功'})
        return Response({'code':201,'msg': res.errors})

    def delete(self,request,pk):
        self.get_queryset().filter(pk=pk).delete()
        return Response('')

 

标签:res,self,request,rest,framework,视图,基类,drf
From: https://www.cnblogs.com/shangxin-bai/p/16742158.html

相关文章

  • MySQL高级 1:视图
    1.视图是什么通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。视图是对若干张基本表的引用,一张虚表......
  • drf之请求与响应、drf之视图组件、2个视图基类
    drf之请求与响应Request和Response类继承APIView后,请求对象:request,每一次请求都是一个新的requestRequest类:属性或方法data:POST、PUT、PATCH请求方式解析后的数据......
  • Oracle 12C R2-新特性---实时物化视图
    文字部分基本上都是官方文档翻译过来的,不准确的地方请谅解。物化视图可用于查询重写,即使它们并不完全与基表同步,并且被认为失效。使用物化视图日志与增量计算以及陈旧的物......
  • 了解视图dm_os_performance_counters的cntr_type含义
    dm_os_performance_counters说明该视图用于查看数据库的性能指标,但是不同的指标类型(cntr_type)计算方法有所不同。大概有以下不同类型:selectobject_name,counter_name,ins......
  • Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet
    SpringMVC使用细节第一节视图解析器通过HelloWorld程序我们看到了handler方法的返回值表示:请求处理完成后,请SpringMVC执行一个请求转发。转发的地址就是handler方法的......
  • 20. NumPy副本和视图
    1.前言对NumPy数组执行些函数操作时,其中一部分函数会返回数组的副本,而另一部分函数则返回数组的视图。本节对数组的副本和视图做重点讲解。其实从内存角度来说,副本就是......
  • drf之模型类序列化器ModelSerialize
    序列化常用字段charFieldBooleanFieldIntegerFieldDecimaField#ListField:{name:'summer',hobby:[1,2,3,4]}#DictField:{nane:'summer',wife:{'name':'哈哈哈'}}......
  • drf序列化类
    目录序列化类常用字段类和字段参数1.常用字段2.常用字段参数2.1.给CharField字段类使用的参数2.2.给IntegerField字段类使用的参数2.3.通用参数2.4.重点序列化类高级用法之......
  • drf ModelSerializer模型类序列化器
    序列化类的常用字段类和字段类参数 序列化类的常用字段类和字段类参数序列化类的字段类字段名=serializers.字段类型(字段参数)主要的字段类CharFieldBoolean......
  • drf之序列化类
     一、序列化类的常见字段类和常见参数1.1常见的字段类字段字段构造方式BooleanFieldBooleanField()NullBooleanFieldNullBooleanField()CharFieldChar......