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

这篇具有很好参考价值的文章主要介绍了【Django】 Task5 DefaultRouter路由组件和自定义函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

写在最后

  愉快的打卡时间过得飞快,再次感谢DataWhale全体工作人员的辛勤付出,让我们聚在一块学习、一块进步、一块成长,笔芯~

  在这次活动中也认识了很多有趣的小伙伴,队长Puppet总是在群里第一时间分享自己的学习博客,总是提醒我们记得打卡,蟹蟹队长。也认识了超爱学习的小蜗牛,短短几个小时的交流过程中,发现她有对问题思考、并且学习态度一丝不苟,凌晨两点多还在写博客总结学习笔记。

  终点很远,坚定前行,感受沿途风景,最后会有收获的。

                         ——cheunghonghui
                           2023.08.22

【Django】 Task5 DefaultRouter路由组件和自定义函数,Django,django,数据库,sqlite

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 配置。

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 登录视图。

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 视图集,用于处理图书数据:

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 注册到路由器中:

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 装饰器的简单示例:

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 装饰器中,您可以使用以下参数:文章来源地址https://www.toymoban.com/news/detail-673689.html

  • detail:布尔值,指示操作是否应该针对单个对象(True)还是整个集合(False)。默认为 True。
  • methods:一个包含允许的 HTTP 方法的列表,如 [‘GET’, ‘POST’]。
  • url_path:自定义操作的 URL 路径部分。
  • url_name:自定义操作的 URL 名称。
    其他视图函数的参数,如 request 和 pk。
    通过 @action 装饰器,您可以轻松地扩展您的 DRF 视图集,添加自定义操作,以满足特定的业务需求。

到了这里,关于【Django】 Task5 DefaultRouter路由组件和自定义函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter(九)Flutter动画和自定义组件

    Animation、Curve、Controller、Tween这四个角色,它们一起配合来完成一个完整动画 Animation Animation是抽象类,和UI渲染没有关系,功能是保存动画的插值和状态;比较常用的是Animation addListener:帧监听器中最常见的行为是改变状态后调用setState()来触发UI重建 addStatusListener:动画开始

    2024年02月10日
    浏览(48)
  • 【IC设计】ICC1 workshop lab guide 学习笔记——Lab 2 Design Planning Task5-9

    In the task following this one you will use “Power Network Synthesis” (PNS) to automate the creation of power/ground core and individual macro rings, as well as vertical and horizontal straps. If you want to create rings around groups of macros, that is done prior to PNS, which is what this task will accomplish. 在接下来的任务中,你将使用电源

    2024年02月13日
    浏览(34)
  • 如何为微信小程序添加WXML模板和自定义组件

    微信小程序是一种基于微信平台的应用开发框架,开发者可以使用小程序框架提供的组件、API和开发工具,快速开发出符合微信用户体验的小程序。 在小程序中,WXML(WeiXin Markup Language)是一种类似HTML的标记语言,用于描述小程序的结构。WXML的语法和HTML非常相似,但是有一

    2024年03月19日
    浏览(50)
  • Zabbix6.2利用模板和自定义监控项监控华为AR3260路由器

    1:登录路由器的WEB管理控制台。在系统管理中找到SNMP然后开启SNMP代理,SNMP的版本可以只选择v2c都选择也无所谓,然后点击新建一个团体。 2:团体名称输入默认的public即可,在WEB端显示的是乱码,但是不影响使用,访问模式选择只读。 3:登录Zabbix在监控中点击主机。 4:然

    2024年02月09日
    浏览(79)
  • React UI组件库——如何快速实现antd的按需引入和自定义主题

    大家上午好呀~ 今天来学习一下React的UI组件库以及antd的使用相关的知识点。 感兴趣的小伙伴可以给个三连哦~ material-ui(国外) ant-design(国内蚂蚁金服) antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。 安装antd组件库: 默认按需引入antd组件

    2024年02月02日
    浏览(37)
  • uni-app 使用v-model封装picker组件和自定义样式

    1、v-model封装picker组件 (1)封装组件myPicker.vue (2)组件调用 (3)属性说明 属性名 类型 默认值 说明 options Object 数据选项,默认[{ name: \\\"办公\\\", value: \\\"1\\\" }]格式 rangeKey String label 数据选项的属性名 rangeValue String value 数据选项的属性值 placeholoder String 请选择 未选择数据时的默认

    2024年02月09日
    浏览(50)
  • Vue3中v-model在原生元素和自定义组件上的使用

    目录 前言 一、原生元素上的用法 1. 输入框(input) 2. 多行文本域(textarea) 3. 单选按钮(radio) 4. 多选框(checkbox)  5. 下拉选择框(select)  二、自定义组件上的用法 1. 定义一个名为 modelValue 的 props 属性和一个名为 update:modelValue 的事件 2.使用一个可写的,同时具有 getter 和 setter

    2024年02月14日
    浏览(61)
  • 微信小程序TS项目使用mobx(页面直接使用store和自定义组件中使用store)

     注意:下载完成后,需要删除 miniprogram_npm 目录后,重新构建 npm。 注意:ts编写的话,方法中使用this,需要在参数中定义this: any,否则会提示错误 引入onLoad()方法中引入createStoreBindings将store上的方法和属性绑定到页面中 在unOnLoad()方法中销毁destroyStoreBindings() 页面中使用:

    2024年02月16日
    浏览(48)
  • 一周学会Django5 Python Web开发-Django5路由定义

    锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计22条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、

    2024年02月19日
    浏览(50)
  • HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

    允许在生命周期函数中使用 Promise 和异步回调函数,比如网络资源获取,定时器设置等; 即被@Entry 装饰的组件生命周期,提供以下生命周期接口: onPageShow 页面加载时触发,页面每次显示时触发一次,包括路由过程、应用进入前台等场景。 onPageHide 从第一个页面跳转第二个

    2024年01月21日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包