Django API 开发:视图设置和路由(下)

简介: 在本章中,我们将向现有项目中添加两个新的 API 端点,并了解如何从视图和 URL 切换到视图集和路由器可以用更少的代码实现相同的功能。

视图集

视图集是一种将多个相关视图的逻辑组合到单个类中的方法。 换句话说,一个视图集可以替换多个视图。 当前,我们有四个视图:两个用于博客帖子,两个用于用户。 相反,我们可以使用两个视图集来模仿相同的功能:一个用于博客文章,另一个用于用户。


折衷方案是,对于不十分熟悉视图集的其他开发人员,可读性会有所下降。 所以这是一个权衡。当我们交换视图集时,代码在更新后的 posts/views.py 文件中是这样的。

# 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


在顶部,而不是从 rest_framework 导入泛型,我们现在在第二行导入视图集。 然后,我们使用 ModelViewSet,它为我们提供了列表视图和详细信息视图。 而且,我们不再需要像以前一样为每个视图重复相同的 queryset 和 serializer_class 。

Routers 路由

直接与视图集一起使用,以自动为我们生成 URL 模式。 我们当前的 posts/urls.py 文件具有四个 URL 模式:两个用于博客文章,两个用于用户。相反,我们可以为每个视图集采用一条路由。 因此,使用两个路由而不是四个 URL 模式。 听起来更好吧?


Django REST Framework 具有两个默认路由器: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, base_name='users') router.register('', PostViewSet, base_name='posts')
urlpatterns = router.urls


在最上面一行,将导入 SimpleRouter 及其视图。 路由器设置为 SimpleRouter,我们为用户和帖子“注册”每个视图集。 最后,我们将 URL 设置为使用新路由器。


继续并立即检查我们的四个端点! 用户列表是相同的。

网络异常,图片无法展示
|


但是,局部视图有些不同。 现在它被称为“用户实例”,而不是“用户详细信息”,并且还有一个附加的“删除”选项内置于ModelViewSet中。


网络异常,图片无法展示
|


可以自定义视图集,但是一个重要的折衷是用视图集编写更少的代码,这是默认设置,它可能需要一些其他配置才能完全匹配您想要的内容。


转到发布列表,我们可以看到它是相同的:


网络异常,图片无法展示
|


重要的是,我们的权限仍然有效。 使用我们的 testuser2 帐户登录时,Post Instance 为只读。


网络异常,图片无法展示
|


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


网络异常,图片无法展示
|


总结

视图集和路由器是一种强大的抽象,可减少开发人员必须编写的代码量。 但是,这种简洁性是以牺牲初始学习曲线为代价的。 最初几次使用视图集和路由器而不是视图和 URL 模式会感到很奇怪。


最终,何时向项目添加视图集和路由器的决定是相当主观的。 一个好的经验法则是从视图和 URL 开始。 随着 API 复杂性的增加,如果您发现自己一遍又一遍地重复相同的端点模式,那么请查看视图集和路由器。

相关文章
|
7月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
8月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
8月前
|
人工智能 自然语言处理 机器人
使用 API 编程开发扣子应用
扣子(Coze)应用支持通过 API 编程,将 AI 聊天、内容生成、工作流自动化等功能集成至自有系统。主要 API 包括 Bot API(用于消息交互与会话管理)及插件与知识库 API(扩展功能与数据管理)。开发流程包括创建应用、获取密钥、调用 API 并处理响应,支持 Python 等语言。建议加强错误处理、密钥安全与会话管理,提升集成灵活性与应用扩展性。
2543 0
|
7月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
8月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
7月前
|
存储 缓存 算法
淘宝买家秀 API 深度开发:多模态内容解析与合规推荐技术拆解
本文详解淘宝买家秀接口(taobao.reviews.get)的合规调用、数据标准化与智能推荐全链路方案。涵盖权限申请、多模态数据清洗、情感分析、混合推荐模型及缓存优化,助力开发者提升审核效率60%、商品转化率增长28%,实现UGC数据高效变现。
|
7月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
9月前
|
测试技术 API 开发工具
API文档该怎么写,开发效率能翻几倍?
API文档是提升开发效率与协作的关键因素,本文探讨了API文档的核心要素、常见类型及编写规范,并介绍了如何借助现代化工具如Apifox实现高效管理与维护,助力团队打造高质量的API文档体系。
|
9月前
|
算法 前端开发 API
京东比价项目开发实录:京东API接口(2025)
本文分享了作者在电商开发中对接京东商品详情API的实战经验,涵盖了申请权限、签名算法、限流控制、数据解析等常见问题,并提供了亲测有效的Python代码示例,帮助开发者避坑。
|
9月前
|
人工智能 API 定位技术
MCP 开发实战:手把手教你封装高德地图与 arXiv API
本教程为 MCP(Model Context Protocol)开发实战第二阶段,带你从零封装第三方 API 为 AI 模型可用工具。通过高德地图地理编码与 arXiv 论文检索两个实例,涵盖项目搭建、工具声明、资源定义、错误处理等核心内容,助你快速上手 MCP 开发并集成至 Claude 使用。