【Django 04】Django-DRF(ModelViewSet)

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 应用。通过使用这些技术知识点,我们能够提高开发效率,减少重复的代码编写工作,并且保证代码的一致性和可维护性。

如何使用

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

示例

view.py

python 复制代码
from rest_framework.viewsets import ModelViewSet
class YourModelViewSet(ModelViewSet):
    queryset = YourModel.objects.all()
    serializer_class = YourModelSerializer

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

python 复制代码
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

python 复制代码
class GoodsSerializer(ModelSerializer):

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

    class Meta:
        # 指定需要序列化的表
        model = Goods
        # 指定我们需要序列化的字段
        fields = '__all__'
相关推荐
Flying pigs~~6 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
misL NITL7 小时前
mysql之如何获知版本
数据库·mysql
许彰午7 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
2401_832365528 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
2301_779622418 小时前
Go语言怎么用信号量控制并发_Go语言semaphore信号量教程【入门】
jvm·数据库·python
2301_766283448 小时前
c++如何将控制台输出保存到文件_cout重定向到txt【详解】
jvm·数据库·python
北极的冰箱8 小时前
MySQL Ver 8.0.41 for macos14.7密码遗忘
数据库·mysql
XDH_CS9 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
treacle田9 小时前
达梦数据库-统计信息收集-记录
数据库·达梦数据库统计信息收集
审判长烧鸡10 小时前
PostgreSQL之索引/函数/触发器
数据库·postgresql·触发器·函数·索引