在django中应用视图和路由集

本文涉及的产品
性能测试 PTS,5000VUM额度
应用实时监控服务-应用监控,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【6月更文挑战第10天】 本文介绍viewsets`和`Routers`是Django REST framework中用于简化API视图和路由的工具。它们提供了一个抽象层,允许用更少的代码替代多个相关视图,并能自动生成URL。定义`UserList`和`UserDetail`视图集,分别用于列表和详情展示。

简介

本文档介绍了如何添加列出所有用户和单个用户的新端点,涉及创建新的序列化器、视图集和URL路由。首先,通过get_user_model引用User模型并创建UserSerializer。接着,在django中要从视图和URL切换到视图集,可以减少代码量,如在config/urls.py中所示。

1 视图集和路由集 Viewsets and Routers

  • viewsets

         rest_framework 的api视图开发工具
    
  • routers

          rest_framework的 api 路由开发工具
    

它们是视图和URL之上的附加抽象层。首要的好处是单个视图集可以替换多个相关视图。而且路由器可以自动为开发人员生成网址。

如何从视图和URL切换到视图集?路由器可以实现相同的功能,而所需的功能要少得多代码。config/urls.py 现有的路由

     admin/     
    api/ 
    api/auth/
    api/v1/
    api/v1/dj-rest-auth/
    api/v1/dj-rest-auth/registration/ 
    api/v1/dj-rest-auth/
    api/v1/dj-rest-auth/registration/

前两个端点是我们创建的,而dj-rest-auth提供了另外五个端点。

现在让我们添加两个附加端点以列出所有用户和单个用户。

2 基本步骤

传统的Django有一个内置的User模型类,我们在认证一章的前面的版本中已经使用过。因此,我们不需要创建新的数据库模型。

相反,我们只是需要连接新的端点。此过程始终涉及以下三个步骤

     新的 serializer 类
     新的 views 视图集
     为每个端点的新的 URL 路由集

修改serializers,添加新的 用户类, posts/serializers.py

    from django.contrib.auth import get_user_model # new
    from rest_framework import serializers
    from .models import Post
    class PostSerializer(serializers.ModelSerializer):
        class Meta:
            model = Post
            fields = ('id', 'author', 'title', 'body', 'created_at',)
    class UserSerializer(serializers.ModelSerializer): # new
        class Meta:
            model = get_user_model()
            fields = ('id', 'username',)

这里将使用了get_user_model来引用User模型,在Django中,实际上有三种不同的方式来引用User模型。

通过使用get_user_model,我们可以确保我们引用的是正确的用户模型,无论它是否是默认用户或自定义用户模型,通常在新的Django项目中定义。

3 配置的过程

我们需要为每个端点定义视图。首先将UserSerializer添加到列表中。

然后创建列出所有用户的UserList类和UserDetail类提供单个用户的详细视图。就像我们的帖子视图一样,在这里我们可以使用ListCreateAPIView和RetrieveUpdateDestroyAPIView。

我们还需要参考用户通过get_user_model进行建模,以便将其导入到第一行。

修改视图, posts/views.py

    from django.contrib.auth import get_user_model # new
    from .serializers import PostSerializer, UserSerializer 

    class UserList(generics.ListCreateAPIView): # new

        queryset = get_user_model().objects.all()
        serializer_class = UserSerializer

    class UserDetail(generics.RetrieveUpdateDestroyAPIView): 

        queryset = get_user_model().objects.all()
        serializer_class = UserSerializer

”视图和“用户”视图都具有完全相同的queryset和serializer_class。也许可以通过某种方式将它们组合在一起保存代码。

修改 posts/urls.py 应用路由

urlpatterns = [path('users/', UserList.as_view()), 

        path('users/<int:pk>/', UserDetail.as_view()), # new
        ...]

确保本地服务器仍在运行,并跳至可浏览的API.

    http://127.0.0.1:2000/api/v1/users/

3 小结

在具有多个端点的大型项目中,这意味着开发人员可以编写更少的代码。可以说,对于有经验的开发人员来说也更好理解。

这是一个共同的特征,在许多API开发中有这个需求,这将使我们更加清楚为什么将我们的视图和URL重构为视图集和路由器。

目录
相关文章
|
2月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
92 1
|
1月前
|
Python
Django 框架的路由系统
Django 框架的路由系统
44 6
|
2月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
104 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
2月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
151 0
|
2月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
29 0
|
2月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
28 0
|
4月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
72 2
|
4月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
47 1
|
3月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
4月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
86 0
下一篇
DataWorks