【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数

这篇具有很好参考价值的文章主要介绍了【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Django-DRF(ModelViewSet)

1.1 DRF是什么?

ModelViewSet 是 Django REST framework 提供的一个视图集类,它封装了常见的模型操作方法。

模型类提供了默认的增删改查功能。

它继承自 GenericViewSetListModelMixinRetrieveModelMixinCreateModelMixinUpdateModelMixinDestoryModelMixin

知识点 请求 url 特点
GenericViewSet 提供一组通用的视图方法,方便实现特定功能
ListModelMixin get 127.0.0.1:8000/book/ 提供 list 方法,用于获取资源列表
RetrieveModelMixin get 127.0.0.1:8000/book/{1}/ 提供 retrieve 方法,用于获取单个资源的详细信息
CreateModelMixin post 127.0.0.1:8000/book/ 提供 create 方法,用于创建资源
UpdateModelMixin put 127.0.0.1:8000/book/{1}/ 提供 update 方法,用于更新资源
DestroyModelMixin detete 127.0.0.1:8000/book/{1}/ 提供 destroy 方法,用于删除资源
自定义 get/post 127.0.0.1:8000/book/自定义 用户自定义方法/函数

这些技术知识点可以配合使用,帮助我们快速构建出具有 CRUD 功能的 Web 应用,并且遵循了 Django 框架的惯例和最佳实践。它们的应用场景包括博客系统、电商平台、社交网络等各种类型的 Web 应用。通过使用这些技术知识点,我们能够提高开发效率,减少重复的代码编写工作,并且保证代码的一致性和可维护性。

1.2 如何使用

设置 queryset 属性为要查询的对象集合,并设置 serializer_class 属性为对应的序列化器类。

1.2.1 示例

view.py

from rest_framework.viewsets import ModelViewSet
class YourModelViewSet(ModelViewSet):
    queryset = YourModel.objects.all()
    serializer_class = YourModelSerializer

使用 ModelViewSet 后,你将自动获得默认的 CRUD 方法。

from rest_framework.decorators import action
#### modelviewset
class GoodsCategoryViewSet(ModelViewSet):
    # 指定查询集(用到的数据)
    queryset = GoodsCategory.objects.all()
    # 指定查询集用到的序列化容器
    serializer_class = GoodsCategorySerializer

    @action(detail=False, methods=['get'])
    def latest(self, request):
        latest_obj = GoodsCategory.objects.latest('id')
        print(latest_obj)
        return Response("helllo 你调用了自定义的函数")

serializer.py

class GoodsSerializer(ModelSerializer):

    # 外键字段相关的数据 需要单独写
    category = GoodsCategorySerializer()

    class Meta:
        # 指定需要序列化的表
        model = Goods
        # 指定我们需要序列化的字段
        fields = '__all__'

2. Django-DRF 路由组件

2.1 路由组件是什么?

DefaultRouter是Django REST framework中提供的一个路由器类,用于自动生成URL路由。

路由器是将URL与视图函数或视图集关联起来的一种机制。Django REST framework的路由器通过简单的配置可以自动生成标准的URL路由,从而减少了手动编写URL路由的工作量。

2.2 DefaultRouter的使用方法

urls.py

from django.contrib import admin
from django.urls import path
from apps.erp_test.views import *

from rest_framework import routers

router = routers.DefaultRouter()
router.register('GoodsCategory', GoodsCategoryViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('filtergoodscategory/', FilterGoodsCategory),
    path('insertgoodscategory/', InsertGoodsCategory),
    path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),
    path('getgoods/', GetGoods.as_view()),
]


urlpatterns += router.urls

【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数,Django,django,sqlite,数据库,1024程序员节
【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数,Django,django,sqlite,数据库,1024程序员节

主要是将一个类里面的所有方法都加入到路由里面来。

使用routers.DefaultRouter()​创建了一个默认的路由器对象,并使用router.register()​方法注册了一个视图集,GoodsCategoryViewSet​。这样可以自动为这个视图集生成对应的URL路由,并将其添加到urlpatterns​中。

【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数,Django,django,sqlite,数据库,1024程序员节
【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数,Django,django,sqlite,数据库,1024程序员节
【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数,Django,django,sqlite,数据库,1024程序员节

3. Django-DRF 自定义函数

3.1 自定义函数是什么

from rest_framework.decorators import action

@action 是 Django REST framework 中的一个装饰器,用于将自定义函数转换为视图集的一个动作。@action 装饰器提供了一种定义自定义函数的方式,这些函数并不直接对应于标准的 CRUD 操作(Create-Read-Update-Delete),而是实现一些其他的自定义行为或业务逻辑。
“ @action 装饰器”用于在 ViewSet 中创建自定义动作(custom action),为 ViewSet 提供了更灵活应用且 @action 只在ViewSet视图集中生效。视图集中附加action装饰器可接收两个参数:
(1)methods: 声明该action对应的请求方式.
(2)detail: True/False声明该action的路径是否是action对应的请求方式。

3.2 如何使用

views.py

class GoodsCategoryViewSet(ModelViewSet):
    # 指定查询集(用到的数据)
    queryset = GoodsCategory.objects.all()
    # 指定查询集用到的序列化容器
    serializer_class = GoodsCategorySerializer

    @action(detail=False, methods=['get'])
    def latest(self, request):
        latest_obj = GoodsCategory.objects.latest('id')
        print(latest_obj)
        return Response("helllo 你调用了自定义的函数")


    @action(detail=False, methods=['get','post'])
    def delete_example(self, request):
        name = request.data.get('name')
        # 删除名称为 'name' 的商品
        categories_to_delete = GoodsCategory.objects.filter(name=name)
        # 使用delete()方法删除对象
        deleted_count= categories_to_delete.delete()
        print(f"Deleted {deleted_count} categories.")      

    @action(detail=False, methods=['get','post'])
    def create_example(self, request):
        name = request.data.get('name')
            # 使用create()方法创建新的商品分类对象
        created_category = GoodsCategory.objects.create(name)
        print("Created category:", created_category)   

其中,detail=False 表示该动作不需要处理单个对象,而是处理整个集合;

@action 装饰的函数需要作为方法定义在视图集类中,并且在使用 router.register() 注册视图集时,需要指定 basename 参数,以确保该动作的 URL 能够正确映射到视图集。文章来源地址https://www.toymoban.com/news/detail-719995.html

到了这里,关于【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Django-05 ]自定义sql查询

    这样后续的操作都会在这个数据库中 这里在一些多表关联的时候是特别特别有用的,也是实际开发中不可避免的知识点 with 写法 普通写法

    2024年02月04日
    浏览(45)
  • 【Django】Task4 序列化及其高级使用、ModelViewSet

    Task4主要了解序列化及掌握其高级使用,了解ModelViewSet的作用,ModelViewSet 是 Django REST framework(DRF)中的一个视图集类,用于快速创建处理模型数据的 API 视图。 Django 的序列化是指将复杂的数据结构(通常是数据库中的模型对象)转换为可以在不同应用程序间传输和存储的格

    2024年02月11日
    浏览(44)
  • 前端Vue入门-day05-自定义指令、插槽、路由入门

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 自定义指令  基本语法 (全局局部注册) 全局注册  局部注册 指令的值  v-loading 指令封装 插槽 默认插槽 后备内容(默认值)  具名插槽  作用域插槽  路由入门 单页应

    2024年02月13日
    浏览(40)
  • 自学Python05-学会Python中的函数定义

    亲爱的同学们,今天我们将开始学习 Python 中的函数。函数就像一个魔法盒子,可以让我们在程序中执行一段代码,并且可以反复使用。这样,我们的程序就可以变得更加简洁和易于理解。现在,让我们一起来学习如何使用函数吧! 首先,我们需要知道如何定义一个函数。定

    2024年02月09日
    浏览(55)
  • 【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

    目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIsolation 的可选值 3. 数据

    2024年02月07日
    浏览(40)
  • Django进阶:DRF(Django REST framework)

    DRF 即 Django REST framework 的缩写,官网上说: Django REST framework 是一个强大而灵活的工具包,用于 构建Web API 。 简单来说:通过DRF创建API后,就可以通过HTTP请求来获取、创建、更新或删除数据(CRUD)。 那么为什么要构建API呢? 在Django中,我们通过 model-view-template 实现了 后端和前

    2024年02月11日
    浏览(41)
  • django的DRF(三)

    DRF(Django Rest Framework)是可以快速基于Restful开发得Django应用得插件,功能非常多,被广泛应用。 所谓Restful风格就是不在用户请求的URL当中说明 “操作动作(create,delete,put)”。而是直接请求资源,通过不同的http方法来做对应的操作。 比如: 注册: 在settings.py文件中进行注册

    2024年02月21日
    浏览(41)
  • Django DRF - 认证Authentication

    身份验证是将传入请求与一组标识凭据(例如,请求来自的用户或与其进行签名的令牌)相关联的机制。然后,权限和限制策略可以使用这些凭据来确定是否应允许该请求。 身份验证本身不会允许或不允许传入的请求,它只会标识发出请求的凭据。 认证管理一般和权限管理

    2023年04月12日
    浏览(37)
  • 一周学会Django5 Python Web开发-Django5路由定义

    锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计22条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、

    2024年02月19日
    浏览(52)
  • 05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域

    对应输出如上,没有使用len()函数,对应的子算出字符的长度,但是代码整体写的就很别扭。代码过于重复,代码中唯一不一样的地方就是被统计的字符串不同。同时对应的,代码整体也就会比较低效。可以使用函数,优化过程,先定义函数。 同样的输出,效果一样,两者

    2024年01月19日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包