DjangoRestFramework的视图组件和路由组件

一视图组件

  restframework可以轻松完成对某个数据的增删改查的目的,在继承viewsets.ModelViewset后,只需要配置数据管理对象和序列化器即可,

class BookModelView(viewsets.ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = BookSerializer

  上面的方法是直接继承restframework提供的方法来实现对数据的增删改查的目的,根据前端提交请求的方式不同,通过get、post、put、delete、等实现

  使用这种方法的时候,路由需要传参,视图组件在继承ViewsetMixin之后可以进行路由传参 

   url(r‘api/$‘, views.BookModelView.as_view({"get": "list", "post": "create"})),
    url(r‘api/(?P<pk>\d+)‘, views.BookModelView.as_view({"get": "retrieve", "put": "update", "delete": "destroy"})),

  路由传参可以使用路由组件来更加方便的进行达到目的

from rest_framework.routers import DefaultRouter
router =DefaultRouter()
router.register(r‘book‘, views.BookModelView)
urlpatterns += router.urls

  

  我们也可以通过自己重写方法来实现这些功能

class GenericAPIView(APIView):
    queryset = None
    serializer_class = None

    def get_queryset(self):
        return self.queryset.all()

    def get_serializer(self, *args, **kwargs):
        return self.serializer_class(*args, **kwargs)

class ListModelMixin(object):
    def list(self, request):
        queryset = self.get_queryset()
        ser_obj = self.get_serializer(queryset, many=True)
        return Response(ser_obj.data)

class CreateModelMixin(object):
    def create(self, request):
        ser_obj = self.get_serializer(data=request.data)
        if ser_obj.is_valid():
            ser_obj.save()
            return Response(ser_obj.validated_data)
        return Response(ser_obj.errors)

class RetrieveModelMixin(object):
    def retrieve(self, request, id):
        book_obj = self.get_queryset().filter(id=id).first()
        ser_obj = BookSerializer(book_obj)
        return Response(ser_obj.data)

class UpdateModelMixin(object):
    def update(self, request, id):
        book_obj = self.get_queryset().filter(id=id).first()
        ser_obj = self.get_serializer(instance=book_obj, data=request.data, partial=True)
        if ser_obj.is_valid():
            ser_obj.save()
            return Response(ser_obj.validated_data)
        return Response(ser_obj.errors)

class DestroyModelMixin(object):
    def destroy(self, request, id):
        book_obj = self.get_queryset().filter(id=id).first()
        if not book_obj:
            return Response("删除的对象不存在")
        book_obj.delete()
        return Response("")

class ListCreateAPIView(GenericAPIView, ListModelMixin, CreateModelMixin):
    pass

class RetrieveUpdateDestroyAPIView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    pass

class ModelViewSet(ViewSetMixin, ListCreateAPIView, RetrieveUpdateDestroyAPIView):
    pass

  在通过调用自己写的ModelViewSet实现

class BookModelView(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = BookSerializer

  

  

  

原文地址:https://www.cnblogs.com/wszxdzd/p/10004116.html

时间: 2024-07-31 07:02:26

DjangoRestFramework的视图组件和路由组件的相关文章

drf框架 6 视图集与路由组件(开发最常用、最高级) 三大认证原理 RBAC认证规则

准备工作 models.py from django.db import models # 基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的 class BaseModel(models.Model): is_delete = models.BooleanField(default=False) updated_time = models.DateTimeField(auto_now_add=True) class Meta: abstract = True # 必须完成该配置 cla

react路由组件&amp;&amp;非路由组件

<Route exact path="/Home" component={Home}/> 1.路由组件:只有包裹在Route组件里的才能使用`this.props.location`, 2.非路由组件:假如有个需求,是面包屑或者导航组件里需要拿到`this.props.location`(导航组件或者面包屑一般不会包裹在`Route`里吧),那么直接这么写显然就不行了. 这个时候`withRouter`修饰一下,就可以这么写了. . 原文地址:https://www.cnb

vue-router之路由钩子(组件内路由钩子必须在路由组件调用,子组件没用)

模式 vue-router中的模式选项主要在router实例化的时候进行定义的,如下 const router = new VueRouter({ mode: 'history', // 两种类型history 还有 hash routes: routes // 可以缩写成routes }) 有两种模式可供选择,history 和 hash,大致对比一下, 模式 优点 缺点 hash 使用简单.无需后台支持 在url中以hash形式存在,不会传到后台 history 地址明确,便于理解和后台处理

vue基础内容{通信,注册,路由,组件}

ES6常用语法 -- 变量 -- var 变量提升 -- let  {} -- const 常量 -- 模板字符串 -- `` -- ${} -- 函数 -- 箭头函数 -- this -- 普通函数取决于函数最近的调用者 -- 箭头函数取决于当前上下文环境 -- 数据的解构 -- 注意语法 -- 类 -- class 定义类 -- extends 继承 -- constructor 构造方法 -- 子类是没有this的 用super() -- export import -- export {

【DRF框架】路由组件

视图组件涉及的路由补充: from rest_framework.viewsets import ViewSetMixin 对路由进行了重新的分发,重写了as_view() 方法,重新封装了请求方法 from rest_framework.viewsets import ViewSetMixin class ViewSetMixin(object): """ This is the magic. Overrides `.as_view()` so that it takes

DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分页组件 七 xxx 八 xxx 一 认证组件 1. 局部认证组件 我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发, 在咱们看的APIView类中的dispatch方法的源码中,有个self.initial(request, *args, **kwargs),那么认证.权限.频率这三个默认组件都在这个方法里面了,如果我们自己没有做这三个组件的配置,那么会使用源码中默

vue组件、路由、事件

目录 定义Vue组件 组件定义 组件化和模块化的不同 组件中展示数据和响应事件 使用components属性定义局部子组件 组件切换 使用flag标识符结合v-if和v-else切换组件 使用:is属性来切换不同的子组件,并添加切换动画 父子组件传值 父组件向子组件传值 子组件向父组件传值 使用 this.$refs 来获取元素和组件 路由 什么是路由 在 vue 中使用 vue-router 在路由规则中定义参数 使用 children 属性实现路由嵌套 命名视图实现经典布局 watch监听属

自定义路由组件,Django的admin后台管理,DRF的三大认证,jwt认证

目录 一.自定义路由组件 1. 为什么要自定义路由组件 2. 自定义路由组件实例 二.Django的admin后台管理 三.DRF的三大认证组件概括 1. 认证组件 2. 权限组件 3. 频率组件 四.Django中的用户权限管理 五.jwt认证 1. jwt认证和普通session认证的区别 2. jwt认证介绍 (1)jwt的原理 (2)jwt三部分的内容 3. jwt的签发算法 (1)第一步:头部算法 (2)第二步:载荷部分的算法 (3)第三步:签名部分的算法 (4)第四步:连接生成tok

VUE 路由组件左右滑动切换(移动端)

<template> <div id="headed"> <ul class="tab"> <li> <!-- @click="jump(index) index: 切换颜色 代表切换的路由文件 :class="{'active_color': index==0} 当index等于0的时候显示第一个,index:1 切换排球 --> <div class="body_bo