DRF-API学习-Routers

文章目录

使用示例:

python 复制代码
from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'users', UserViewSet)
router.register(r'accounts', AccountViewSet)
urlpatterns = router.urls

有两个强制参数register()方法:

  • prefix-要用于这组路由的URL前缀。
  • viewset-viewset类。

还有一个附加参数:

  • basename: 用于创建URL名称

上面的示例会生成以下URL模式:

  • user-list: ^user/$
  • user-detail: user/{pk}

知识点

  1. 资源路由:DRF 提供了一种快速声明给定资源控制器的所有常见路由的方法。它允许在一行代码中声明资源路由,而不是为索引(index)、详情(detail)等单独声明路由。

  2. 使用示例

    • 通过 SimpleRouter 可以快速设置 URL 配置。
    • 使用 register() 方法注册路由,需要提供 URL 前缀和视图集(viewset)类。
    • 可选参数 basename 用于为生成的 URL 名称提供基础名称。
  3. 生成的 URL 模式:例如,注册用户和账户的视图集将生成列表和详情的 URL 模式。

  4. 使用 include 函数:可以以多种方式将路由的 URL 模式包含在项目的 URL 配置中。

  5. 命名空间 :使用 include 时可以指定应用程序命名空间,这对于使用超链接序列化器时保持一致性很重要。

  6. 额外的路由动作 :通过使用 @action 装饰器,可以在视图集中标记额外的动作以进行路由。

  7. SimpleRouterDefaultRouter :两者都包括标准的 CRUD 操作路由,但 DefaultRouter 还包括一个默认的 API 根视图。

  8. 自定义路由器:如果需要特定的 URL 结构,可以通过扩展现有的路由器类来实现自定义路由器。

  9. 动态路由的自定义 :可以使用 DynamicRoute 命名元组来自定义 @action 装饰器的路由。

  10. 高级自定义路由器 :通过覆盖 BaseRouterget_urls(self) 方法,可以提供完全自定义的行为。

  11. 第三方包 :文如 drf-nested-routerswq.db.rest 中的 ModelRouter,以及 DRF-extensions 包。

SimpleRouter和DefaultRouter

SimpleRouterDefaultRouter 都是 Django REST framework 中用于自动生成 URL 路由的工具。

SimpleRouter

  • 特点:提供了基本的路由规则,用于常见的视图操作,如列表、创建、检索、更新、部分更新和删除。
  • 使用方法:创建一个 SimpleRouter 对象,然后使用 register 方法注册视图集。
  • 示例:
python 复制代码
from rest_framework.routers import SimpleRouter
from your_app.views import YourViewSet

router = SimpleRouter()
router.register('your_resource', YourViewSet)

DefaultRouter

  • 特点:除了包含 SimpleRouter 的功能外,还额外提供了一个根视图,显示 API 的所有可用路由的列表。
  • 使用方法:与 SimpleRouter 类似,创建并注册视图集。
  • 示例:
python 复制代码
from rest_framework.routers import DefaultRouter
from your_app.views import YourViewSet

router = DefaultRouter()
router.register('your_resource', YourViewSet)

不同点

  • DefaultRouter 提供了一个根路由,展示所有已注册的路由信息,方便开发者和用户查看 API 的整体结构。而 SimpleRouter 没有这个根路由。

选择

  • 如果您只需要基本的路由功能,并且不需要展示 API 的整体路由结构,SimpleRouter 就足够了。
  • 如果您希望有一个根路由来展示所有可用的路由,方便文档和调试,或者您希望为用户提供一个快速查看 API 结构的入口,那么 DefaultRouter 是更好的选择。

通常,如果没有特殊需求,DefaultRouter 因为其便利性和额外的根路由功能,被更广泛地使用。

相关推荐
Null箘4 分钟前
从零创建一个 Django 项目
后端·python·django
云空8 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
江上挽风&sty9 分钟前
【Django篇】--动手实践Django基础知识
数据库·django·sqlite
玖年40 分钟前
Python re模块 用法详解 学习py正则表达式看这一篇就够了 超详细
python
岑梓铭44 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
游客5201 小时前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
Eric.Lee20211 小时前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Dontla1 小时前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
qq_529025292 小时前
Torch.gather
python·深度学习·机器学习
数据小爬虫@2 小时前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python