【愚公系列】2022年04月 Python教学课程 71-DRF框架之内置路由

简介: 【愚公系列】2022年04月 Python教学课程 71-DRF框架之内置路由

一、路由

对于视图集ViewSet,我们除了可以自己手动指明请求方式与视图方法[官方文档中也叫action,动作]之间的对应关系外,还可以使用Routers来帮助我们自动生成路由信息。


REST framework提供了两个router


SimpleRouter

DefaultRouter

1.SimpleRouter

1.1 基本使用

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- 视图集类。

(可选)您还可以指定一个附加参数:


basename- 用于所创建的 URL名称的基础。如果未设置,则将根据视图集的属性(如果有)自动生成基名。请注意,如果视图集不包含属性,则必须在注册视图集时进行设置。

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


网址模式: 名称:^users/$‘user-list’

网址模式: 名称:^users/{pk}/$‘user-detail’

网址模式: 名称:^accounts/$‘account-list’

网址模式: 名称:^accounts/{pk}/$‘account-detail’

1.2 合并使用

router = routers.SimpleRouter()
router.register(r'users', UserViewSet)
router.register(r'accounts', AccountViewSet)
urlpatterns = [
    path('forgot-password/', ForgotPasswordFormView.as_view()),
]
urlpatterns += router.urls
urlpatterns = [
    path('forgot-password', ForgotPasswordFormView.as_view()),
    path('', include(router.urls)),
]
urlpatterns = [
    path('forgot-password/', ForgotPasswordFormView.as_view()),
    path('api/', include((router.urls, 'app_name'), namespace='instance_name')),
]

1.3 额外操作的路由

视图集可以通过使用装饰器修饰方法来标记用于布线的额外操作。这些额外的操作将包含在生成的路由中。例如,给定类上的方法:action()


from myapp.permissions import IsAdminOrIsSelf
from rest_framework.decorators import action
class UserViewSet(ModelViewSet):
    ...
    @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf])
    def set_password(self, request, pk=None):
        ...

将生成以下路由:


网址模式:^users/{pk}/set_password/$

网址名称:'user-set-password'

默认情况下,URL 模式基于方法名称,URL 名称是方法名称和带连字符的方法名称的组合。如果不想为这两个值中的任何一个使用默认值,则可以改为向装饰器提供 and 参数。


例如,如果要将自定义操作的 URL 更改为 ,则可以编写:^users/{pk}/change-password/$


from myapp.permissions import IsAdminOrIsSelf
from rest_framework.decorators import action
class UserViewSet(ModelViewSet):
    ...
    @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf],
            url_path='change-password', url_name='change_password')
    def set_password(self, request, pk=None):
        ...

上面的示例现在将生成以下 URL 模式:


网址路径:^users/{pk}/change-password/$

网址名称:'user-change_password'

注意点:


默认情况下,创建的 URL 会附加尾部斜杠。可以通过在实例化路由器时将参数设置为来修改此行为。例如:


router = SimpleRouter(trailing_slash=False)

尾随斜杠在 Django 中是约定俗成的,但在其他一些框架(如 Rails)中默认不使用。你选择使用哪种风格很大程度上取决于你的偏好,尽管一些javascript框架可能会期望特定的路由风格。


路由器将匹配包含除斜杠和句点字符之外的任何字符的查找值。对于限制性更强(或宽松)的查找模式,请在视图集上设置属性。例如,可以将查找限制为有效的 UUID:


class MyModelViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    lookup_field = 'my_model_id'
    lookup_value_regex = '[0-9a-f]{32}'

2.DefaultRouter

此路由器与上述路由器类似,但还包含默认 API 根视图,该视图返回包含指向所有列表视图的超链接的响应。它还为可选样式格式后缀生成路由。


from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'accounts', AccountViewSet)
urlpatterns = router.urls

与 URL 路由上的尾部斜杠一样,可以通过在实例化路由器时将参数设置为 来删除。


router = DefaultRouter(trailing_slash=False)

相关文章
|
2月前
|
JSON 监控 BI
拼多多批量下单工具,拼多多买家批量下单软件,低价下单python框架分享
使用Selenium实现自动化操作流程多线程订单处理提升效率
|
2月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
2月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
1月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制
|
2月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
2月前
|
消息中间件 存储 API
抖音私信协议软件,抖音群发私信的工具,抖音自动私信插件【python框架】
这个框架包含配置管理、消息队列、API客户端和主程序四个主要模块。配置管理负责存储账号信息和设置
|
2月前
|
数据采集 API 调度
Python爬虫框架对比:Scrapy vs Requests在API调用中的应用
本文对比了 Python 中 Scrapy 与 Requests 两大爬虫框架在 API 调用中的差异,涵盖架构设计、调用模式、性能优化及适用场景,并提供实战建议,助力开发者根据项目需求选择合适工具。
|
6月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
131 1
|
10月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
572 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路

热门文章

最新文章

推荐镜像

更多