Django Rest Framework 6:视图集和路由器

      最后更新:2022-03-21 08:53:21 手机定位技术交流文章

      一,视图集

      REST框架使收集相关集体观点的逻辑能够统一到一个单类中,并命名为:ViewSet“资源”或“主计长”等概念概念的相似性,也可在其他框架中找到。

      ViewSet这是对集团观点的抽象归纳,因此不给任何这种观点。.get().post()这些具体办法涉及程序,但也包括下列特点:.list().create()之类的操作。

      • ViewSet仅在视图关闭时使用联系人。.as_view()该技术与相关操作相关联。

      在大多数情况下,您不需要明确注册 URL 中设定的视图,但您必须注册 URL 中设定的视图。Router路径将由路由路由器自动确定 。

      (一)视图集

      首先,为什么你需要一个视图组?

      首先,提出两种截然不同的简单类别意见,然后获取用户名单和用户详情:

      显然,我们可以利用通用类别观点和Meixin类简化处理这两类请求的方式:

      我们以这种方式重建一般类别观点。get()方法中的逻辑交由ListModelMixin提供的list()方法来实现,同理,UpdateModelMixinupdate替换putDestroyModelMixindestroy替换delete总之,将通用视图类与Meixin类相结合的结果是用行动取代了 http_methods。

      虽然这两类观点通过行动独立发挥作用,但它们是资源集合和个别资源,但仅靠同一类资源运作,纯粹由于“异性恋”,我们将这些观点分成各种观点,通过行动独立运作这两种观点,它们是资源集合和个别资源,但仅因为“异性恋”而使用同一类资源,我们将其分为不同观点。

      为了做到这一点,我们或许可以进一步把这些行动一起抽象起来,使它们更容易处理,而这正是抽象的含义。ViewSet视图集。

      现在创建基本视图集 :

      • ModelViewSet所有行为都得到援助。

      使用一套观点可能是一个非常宝贵的概念,因为它减少了必须准备的代码数量。

      但是,出现了新的挑战:如何绘制URL?

      2. 增强路由器操作和观察浓度

      如有必要,我们仍可将这一观点与URL中的两种不同观点联系起来,

      我们通常不这样做。我们只需要一个路由器来注册我们的视图集, 然后我们可以自动完成 URL 地图而不使用正常的路线系统 :

      我们不再需要设计自己的路径图,因为我们使用路由器。

      REST框架已预先安装。DefaultRouter这将为一套共同的CRUD业务提供一条道路,这些业务如下:

      如果有其他绘图技术,我们可以使用这些技术。@action可以使用装饰符标记它们。其他动作,如通用动作,可以用于对象列表或具体示例。

      要显示此选项, 必须配置设置 。detail参数为 True 或 False, 路由器将适当设置其 URL 模式 。

      广泛的进一步行动实例:

      此外,设计师还可以按照下列参数配置路线视图:

      @action设计器的默认路由器 Get 请求, 虽然也可以配置methods其他HTTP方法可以接受,其参数如下:

      当然,你可以使用我先前概述过的同样方法。@detail_route@list_route来一定程度上代替@action

      如果您想看所有额外操作,请打电话。.get_extra_actions()方法。

      如果您需要操作,请使用 URL。.reverse_action()方法。这是Reverse(),该视图自动传输视图request对象,并在url_name前加上.basename属性。
      请注意,basename路由器在整个设定的视图中给出了登记时间。如果未使用路由器,则必须提供其供应,在整个设定的视图中给出登记时间。如果未使用路由器,则必须提供。.as_view()方法提供basename参数:

      或者使用@action装饰器设置的url_name属性:

      • .reverse_action()url_name参数应该与@action设计师的参数与设计师的参数相同。此外,也可以使用这种方法来逆向默认操作。listcreate

      视图对视图设置

      与使用View类相比,使用ViewSet类有两个主要优点。

      • 重复逻辑可以归为一类。 在上述例子中,我们需要做的就是提供一个可以在许多观点中使用的解答。
      • 不需要在使用根机的同时自行管理 URLconf 。

      这并不是说,观点始终是最佳方法,必须考虑一系列类似的权衡:

      • 使用传统浏览器和URL可以提供更好的控制和清晰度。
      • 当您需要快速启动和运行一个程序时, 或当您拥有庞大的 API 并且想要在整个过程中执行一个一致的 URL 设置时, ViewSet 非常有用 。

      (二) 成套供查看的API参考参考

      1,ViewSet

      ViewSet类继承自APIView您可以使用任何标准属性(例如,permission_classesauthentication_classes管理套视图集的 API 政策

      它没有带来任何业务上的实现,而且往往需要分门别类和明确规定业务上的实现。

      2,GenericViewSet

      GenericViewSet继承自GenericAPIView,并提供默认的get_objectget_queryset方法和GenericAPIView但是,默认情况下,没有包括任何操作。
      它通常需要分门别类或综合所需物品。mixina类,或执行可见的界定程序

      3,ModelViewSet

      ModelViewSet类也继承自GenericAPIView,并通过混合各种mixin这种行为包括执行各种行动。.list(),.retrieve(),.create(),.update(),.partial_update().destroy()的实现。

      因为ModelViewSetextends继承自GenericAPIView因此,必须在使用时提供。querysetserializer_class属性

      注意,可以使用GenericAPIView例如,任何标准属性或方法都经过修改,以便动态地确定是否应当操作套视图集。queryset,则可以重写get_queryset()方法:

      如前所述,路由器必须具体登记。name,当从视图集中删除queryset任何链接的路由器不能在属性之后自动导出模型 。base_name,因此您必须指定base_name作为路由器登记程序的一部分。

      回到教程?‍?。
      这里就来使用ModelViewSet在获取、发布和删除方法方面,将统一各种分散的与片段有关的类别观点。listcreateretrieveupdatedestroy替代。
      然而,在片段灯光下拍摄的操作没有标准化。create/update/delete只收集一个片段模式信息领域的行动应被视为自主行动,并被确认为单独行动。@action的装饰。
      同时,为了在数据正式储存之前继续添加所有者信息,perform_create()在重写方法时,将保留该方法,但不能作为额外行动。ModelViewSet所继承的CreateModelMixin

      4,ReadOnlyModelViewSet

      ReadOnlyModelViewSet类也继承自GenericAPIView。它只提供只读操作.list().retrieve()

      回到教程?‍?。

      我们直接使用它,因为我们不想 存储用户信息 其他地方,但后台。ReadOnlyModelViewSet抽象地看待所有形式的与用户有关的观点:

      最后,这些内在观点组合之间的联系如下:
      在这里插入图片描述

      自定义 ViewSet Basic 类 (三)

      如果有必要以不同于现有固有观点的方式定制业务,则有两种选择:继承业务,规定实现业务,或继承业务,规定实现业务。GenericViewSet它也可以是完全自定义的或混合的。mixin类。
      举个例子?:

      二,路由器

      (一) Django的路线系统

      URL 调度器是Django 路线系统的另一个名称 。

      当用户类型对齐时 :

      1. Django决定是否使用 root URLconf 模块( 默认情况下) 。ROOT_URLCONF设置,经常是"对接项目名" 但是,如果它在里面,它就在里面HttpRequest对象由中心预先确定 。urlconf此值将在属性中替换 。ROOT_URLCONF设置)。
      2. Django装载了Python模块并搜索了无障碍方法。urlpatterns,它是django.urls.path()django.urls.re_path()实例的序列。
      3. Djanrun 将在序列中迭接地访问每个 URL, 然后将请求的 URL 匹配到第一个模式, 然后继续 。HttpRequest对象的path_info匹配。
      4. URL 匹配成功后, Djagno 将导入并调用适当视图 。
      5. 如果找不到 URL, 或者匹配过程中发生错误, Django 将会引用合适的错误处理视图 。

      在这一URL时间表期间,还可以完成更详细的工作:

      • 根 URLconf 模块的 URL 指定给特定应用程序 URLconf 模块 。
      • 在 URL 中,额外参数被传递到视图中。
      • 配合模板里的url标签、视图中的reverse()等函数、模型中的get_absolute_url()扭转URL解释的机制。

      简而言之,路线系统努力确保正确绘制URL和视图图。

      月光休息区的路由器

      休息框架允许自动的 URL 查看绘图,并提供简单、快速和一致的方法-路由器路由器。

      1,使用示例

      举个例子?:

      1. 路由器类就是一个例子。SimpleRouter
      2. 调用register()将视图设置为 USerViewSet 作为示例 。
      3. 以“ 用户” 开头的 URL 模式注册, 并自动生成一些 URL 。
      4. 为这些自动创建的 URL 指定一个值。urlpatterns,等待被请求匹配。

      实际上register()这种方法还允许第三个参数,这是可选的:base_name目标是手工将l分配到标准路线上。name参数值—— 需要这个值, 没有例外 。base_name时由queryset属性代替,连queryset当你没有它时,你必须明确定义它。base_name

      以下的 URL 模式将因前一示例而生成 :

      • URL pattern: ^users/$ Name: ‘user-list’
      • URL pattern: ^users/{pk}/$ Name: ‘user-detail’
      • URL pattern: ^accounts/$ Name: ‘account-list’
      • URL pattern: ^accounts/{pk}/$ Name: ‘account-detail’

      URL 模式开始于register()表示该方法的第一个参数,并用register()动作, URL URL 方法的第二个参数提供的视图名称register()是给定方法的第三个参数。

      当然,这只是最基本的用途,例如:

      urls确实, 返回最简单但最常用的 URL 。

      2. 命名空间和路由器

      我们可以在路线清单中加上自动产生的路线如下:

      如果您想要移动一个路径到 URLconf 模块, 您可以把它与其他的 URL 模块一样公用 。include()函数来实现:

      支持命名空间到能够改变路径的程度是合乎逻辑的:

      如果您使用带有超链接定序器的命名空间,请确定在定序器上不存在任何超链接定序器。view_name下列参数准确描述命名空间:

      3. 增强路由器操作和观察浓度

      一般而言,路由器与成套视图结合使用。 虽然一套视图已经是抽象的,但不可避免地没有必要定制任何功能,在现阶段需要一些装饰器来支持路由器和完成路线绘图:

      • @detail_route
      • @list_route

      举个例子?:

      如果您不想自定义额外操作来使用自动创建的默认 URL, 您可以在设计器中使用它 。url_path比方说自定义参数?

      还可以同时设置url_pathurl_name参数为您在创建自定义视图的 URL 上提供更大的灵活性 。

      (三)API 参考

      1,SimpleRouter

      路由器有一个典型的集合。list,create,retrieve,update,partial_updatedestroy这些是步骤。观察浓度也可以使用。@detail_route@list_route装饰标签是另一个路由选项 。

      路由器生成以下格式的 URL 。
      在这里插入图片描述

      2,DefaultRouter

      该路由器类继承自SimpleRouter添加默认 API 根视图, 并使用格式化后缀模式格式化 URL 。

      在这里插入图片描述
      回到教程?‍?。
      我们用前面的视图替换了分类视图, 下一步是创建路径图。
      在第一个方法中,我们仍然以视觉方式绘制通向特定视图的路线图:我们从请求方法和相应的行动行动开始,通过一组视图开始。as_view()该方法被连接,然后在应用程序 URLconf 模块中逐个插入,该模块的一个特征是能够定义 URL 模式(例如版本号另加显示);

      第二个方法是使用路由器使绘图机制自动化。我们需要做的是将路由器指向 URL 的正确视图:

      • 正在使用的DefaultRouter我们现在可以从视图模块中删除 api_ root 函数, 因为该类会自动为我们建立 API 根视图 。

      看下一效果:
      在这里插入图片描述

      (四)自定义路由器

      路由器以相当固定的方式使用,建议不定制路由器类别或独特的定制程序。更多信息,请参见“自定义根” 。

      教训到此结束!

      更多的练习和积累!

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/20579.html

          热门文章

          文章分类