【Django】 Task5 DefaultRouter路由组件和自定义函数

文章目录

【Django】 Task5 DefaultRouter路由组件和自定义函数

Task5 主要了解了DefaultRouter路由组件,Django REST framework(DRF)是一个强大且灵活的 Django 插件,用于开发 Web API。并且掌握通过@action进行自定义函数。

写在最后

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|   愉快的打卡时间过得飞快,再次感谢DataWhale全体工作人员的辛勤付出,让我们聚在一块学习、一块进步、一块成长,笔芯~   在这次活动中也认识了很多有趣的小伙伴,队长Puppet总是在群里第一时间分享自己的学习博客,总是提醒我们记得打卡,蟹蟹队长。也认识了超爱学习的小蜗牛,短短几个小时的交流过程中,发现她有对问题思考、并且学习态度一丝不苟,凌晨两点多还在写博客总结学习笔记。   终点很远,坚定前行,感受沿途风景,最后会有收获的。                          ------cheunghonghui                            2023.08.22 |

1.路由组件

1.1路由组件介绍

Django REST framework(DRF)是一个强大且灵活的 Django 插件,用于开发 Web API。它提供了一系列工具和组件,帮助您轻松地构建、发布和管理 API。其中,路由组件是 DRF 的一个关键特性,用于将视图函数映射到 URL,使得 API 的 URL 结构更加清晰和可维护。

DRF 的路由组件主要由两个类组成:SimpleRouter 和 DefaultRouter。这些类使您能够自动生成 URL 配置,而无需手动编写 URL 模式。

使用这些路由器,您可以将视图集映射到 URL,从而定义 API 的 URL 结构。Django REST framework 会自动为每个视图集生成适当的 URL 模式,减少了手动配置 URL 的工作。

总之,Django REST framework 的路由组件是一种用于管理 API URL 结构的强大工具,它能够根据视图集自动生成 URL 配置,使得 API 的开发变得更加高效和可维护。

1.2SimpleRouter

SimpleRouter: SimpleRouter 是一个基本的路由器,用于自动生成 CRUD(创建、读取、更新、删除)操作的 URL 配置。您只需将视图集类传递给路由器,它将自动生成适当的 URL 配置。

python 复制代码
from rest_framework.routers import SimpleRouter
from .views import BookViewSet

router = SimpleRouter()
router.register(r'books', BookViewSet)

urlpatterns = router.urls

1.3DefaultRouter

DefaultRouter: DefaultRouter 是一个稍微高级的路由器,除了 CRUD 操作,它还支持额外的路由配置,如 list, create, retrieve, update, partial_update, destroy 和自定义操作。它还提供了根视图和 API 登录视图。

python 复制代码
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = router.urls

1.4DefaultRouter示例

使用 DefaultRouter 时,它会自动生成一组默认的 URL 配置,涵盖了视图集中的 CRUD 操作以及一些额外的自定义操作。以下是使用 DefaultRouter 后生成的默认 URL 访问方式:

假设我们有一个 BookViewSet 视图集,用于处理图书数据:

python 复制代码
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

通过使用 DefaultRouter 将 BookViewSet 注册到路由器中:

python 复制代码
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

生成的默认 URL 访问方式如下:

列表(List): 列出所有图书

URL:/books/
方法:GET
视图函数:list()
创建(Create): 创建新图书

URL:/books/
方法:POST
视图函数:create()
详情(Retrieve): 获取单个图书的详细信息

URL:/books/{pk}/
方法:GET
视图函数:retrieve()
更新(Update): 更新图书的详细信息

URL:/books/{pk}/
方法:PUT
视图函数:update()
部分更新(Partial Update): 部分更新图书的详细信息

URL:/books/{pk}/
方法:PATCH
视图函数:partial_update()
删除(Destroy): 删除图书

URL:/books/{pk}/
方法:DELETE
视图函数:destroy()

除了这些默认的 CRUD 操作外,还可以使用自定义操作,如 list, create, retrieve, update, partial_update, destroy 以及您在视图集中定义的其他自定义操作。这些操作的 URL 也会根据视图集的配置生成。

1.5查看访问服务接口url

在 Django 中,您可以从多个位置获取有关访问的 URL 的信息,特别是在使用 Django REST framework(DRF)创建 Web API 时。以下是一些常见的方法来了解 URL 信息:

路由配置文件: 在 Django 项目的主 urls.py 文件中,您可以查看路由配置以了解所有的 URL。这是定义 URL 路由和视图的地方。

Django REST framework 路由器: 如果在 DRF 中使用了路由器(如 DefaultRouter 或 SimpleRouter),它会自动生成 URL 配置。您可以在路由器的文档或代码中查找生成的 URL。

Django Debug Toolbar: 如果在开发环境中使用了 Django Debug Toolbar,它会显示每个请求的详细信息,包括访问的 URL 和执行的视图。

Django Shell: 您可以在 Django 的交互式 shell 中导入路由配置,并查看生成的 URL。例如,使用 reverse() 函数来查找 URL 的反向映射。

命令行工具: 如果使用 Django 的命令行工具来运行开发服务器,它通常会在控制台中显示正在监听的端口和 URL。

Django REST framework 的 API 浏览器: DRF 提供了一个内置的 API 浏览器,它可以让您通过 Web 界面浏览和测试 API。您可以在浏览器中查看 URL 和执行请求。

文档和注释: 有时,您可以从代码中的文档字符串、注释或文档中找到有关特定 URL 的信息。

总的来说,了解访问的 URL 可以通过查看路由配置、工具和文档等方式来实现。选择最适合您当前环境和需求的方法,以获取所需的 URL 信息。

2.自定义函数

在 Django REST framework(DRF)中,@action 装饰器用于在视图集(Viewset)中定义自定义的操作,这些操作不属于标准的 CRUD 操作(例如列表、创建、获取、更新、删除)。使用 @action 装饰器,您可以将额外的自定义操作添加到视图集中,从而实现特定的业务逻辑。

@action 装饰器的常见用法是在视图集中添加额外的 HTTP 方法,以处理特定的操作。这些自定义操作会映射到视图集的方法,并且可以通过 API 的 URL 进行访问。

以下是一个使用 @action 装饰器的简单示例:

python 复制代码
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import viewsets

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    @action(detail=False, methods=['GET'])
    def popular_books(self, request):
        # Custom logic to retrieve popular books
        popular_books = self.queryset.filter(rating__gte=4)
        serializer = self.get_serializer(popular_books, many=True)
        return Response(serializer.data)

在这个示例中,popular_books 是一个自定义的操作,它会返回所有评分大于等于 4 的热门图书。通过将 @action 装饰器应用于视图函数上,我们可以将这个操作映射到视图集中,使其可以通过 /books/popular_books/ URL 进行访问。

在 @action 装饰器中,您可以使用以下参数:

  • detail:布尔值,指示操作是否应该针对单个对象(True)还是整个集合(False)。默认为 True。
  • methods:一个包含允许的 HTTP 方法的列表,如 ['GET', 'POST']。
  • url_path:自定义操作的 URL 路径部分。
  • url_name:自定义操作的 URL 名称。
    其他视图函数的参数,如 request 和 pk。
    通过 @action 装饰器,您可以轻松地扩展您的 DRF 视图集,添加自定义操作,以满足特定的业务需求。
相关推荐
FIN技术铺34 分钟前
问:数据库的六种锁机制实践总结?
数据库·sql·oracle
程序员劝退师_1 小时前
优惠券秒杀的背后原理
java·数据库
Gauss松鼠会1 小时前
GaussDB全密态数据库等值查询
数据库·oracle·gaussdb
JSUITDLWXL1 小时前
在Oracle数据中更新整个对象和更新对象的某几个字段时,他们的锁是相同的吗
数据库·oracle
杏花春雨江南1 小时前
ddl/dml/dcl
数据库·oracle
Matrix702 小时前
HBase理论_HBase架构组件介绍
大数据·数据库·hbase
不太灵光的程序员2 小时前
【HBase分布式数据库】第七章 数据的导入导出 importtsv导入数据
数据库·分布式·hbase
Mephisto.java2 小时前
【大数据学习 | HBASE高级】region split机制和策略
数据库·学习·hbase
Lucifer三思而后行2 小时前
YashanDB YAC 入门指南与技术详解
数据库·后端
大气层煮月亮2 小时前
python调用MySql详细步骤
数据库·mysql