在django使用视图集和路由集

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 【6月更文挑战第11天】本文介绍Viewsets是Django REST框架中将多个视图逻辑整合到单个类的工具,减少了重复代码。当项目API变得复杂且有重复模式时,考虑使用它们;否则,保持视图和URL模式的简洁性。

1 视图集 Viewsets

视图集是一种将多个相关视图的逻辑组合到单个类中的方法。换个描述方式,也就是一个视图集可以替换多个视图。

mandala曼德罗符号.png

比如,这里有四个视图:两个用于博客文章和两个给用户。通过使用ModelViewSet,示例代码展示了如何为博客文章和用户创建视图集。路由器(如SimpleRouter)与视图集配合,自动生成URL模式,简化路由配置。虽然初期学习曲线较陡峭,但视图集和路由器能提高代码效率,减少重复工作。

我们可以使用两个视图集来模仿相同的功能:一个用于博客和一个供用户使用.代码如下 posts/views.py:

    from django.contrib.auth import get_user_model
    from rest_framework import viewsets # new
    from .models import Post
    from .permissions import IsAuthorOrReadOnly
    from .serializers import PostSerializer, UserSerializer
    class PostViewSet(viewsets.ModelViewSet): # new
        permission_classes = (IsAuthorOrReadOnly,)
        queryset = Post.objects.all()
        serializer_class = PostSerializer

    class UserViewSet(viewsets.ModelViewSet): # new
        queryset = get_user_model().objects.all()
        serializer_class = UserSerializer

它既提供了列表视图又提供了为我们提供详细视图。

而且我们不再对于每个视图都重复相同的queryset和serializer_class。

现在服务停止了,因为缺少路由。 接下来配置路由.

2 路由集 Routers

路由集直接与视图集一起使用,以自动为我们生成URL模式。

我们目前posts/urls.py文件具有四个URL模式:两个用于博客文章,两个用于用户。

我们可以 不用为每个视图集采用一条路线。

因此,使用两个路由而不是四个URL路由模式。

 SimpleRouter  与 DefaultRouter

我们将使用SimpleRouter,但也可以创建自定义路由器以获得更多高级功能。 posts/urls.py

from django.urls import path
from rest_framework.routers import SimpleRouter
from .views import UserViewSet, PostViewSet
    router = SimpleRouter()
    router.register('users', UserViewSet, basename='users')
    router.register('', PostViewSet, basename='posts')
    urlpatterns = router.urls

重启服务,查看效果

python manager.py runserver 0.0.0.0:2000

可以看到现在称为“用户实例”而不是“用户详细信息”,并且内置了一个附加的“删除”选项到ModelViewSet。

可以自定义视图集,但这是一个重要的折衷,以换取更少的编写空间带有视图集的代码是默认设置,可能需要一些其他配置才能匹配您想要的。

但是,如果我们使用超级用户帐户(该博客文章的作者)登录,那么我们就拥有完整的读写编辑删除权限。

3 小结

视图集和路由器集是功能强大的抽象,可减少我们作为开发人员必须写的重复代码量,但是,这种简洁性是以牺牲初始学习曲线为代价的。

几次使用视图集和路由器,而不是视图和URL模式,这很奇怪,然后会感觉头疼。

因此,何时向项目添加视图集和路由器的决定是非常主观的。一个好的经验法则是从视图和URL开始。

如果发现项目API随着复杂性的增长而增长,自己一遍又一遍地重复相同的端点模式,然后查看是否可以使用视图集和路由器。否则在此之前,请保持简单。

目录
相关文章
|
3月前
|
Python
Django 框架的路由系统
Django 框架的路由系统
129 63
|
6月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
85 2
|
6月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
75 1
|
5月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
6月前
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
Django 如何使用视图动态输出 CSV 以及 PDF
64 4
|
6月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
132 0
|
6月前
|
Python SEO
Django入门到放弃之路由
Django入门到放弃之路由
|
6月前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
6月前
|
Python
[django]路由变量与正则表达式
[django]路由变量与正则表达式
|
6月前
|
测试技术 Shell 数据库
Django视图测试:构建可靠Web应用的关键步骤
Django视图测试:构建可靠Web应用的关键步骤
40 0