最后更新:2022-03-21 08:53:21 手机定位技术交流文章
REST框架使收集相关集体观点的逻辑能够统一到一个单类中,并命名为:ViewSet“资源”或“主计长”等概念概念的相似性,也可在其他框架中找到。
ViewSet这是对集团观点的抽象归纳,因此不给任何这种观点。.get()或.post()这些具体办法涉及程序,但也包括下列特点:.list()和.create()之类的操作。
ViewSet仅在视图关闭时使用联系人。.as_view()该技术与相关操作相关联。在大多数情况下,您不需要明确注册 URL 中设定的视图,但您必须注册 URL 中设定的视图。Router路径将由路由路由器自动确定 。
首先,提出两种截然不同的简单类别意见,然后获取用户名单和用户详情:
显然,我们可以利用通用类别观点和Meixin类简化处理这两类请求的方式:
我们以这种方式重建一般类别观点。get()方法中的逻辑交由ListModelMixin提供的list()方法来实现,同理,UpdateModelMixin的update替换put,DestroyModelMixin的destroy替换delete总之,将通用视图类与Meixin类相结合的结果是用行动取代了 http_methods。
虽然这两类观点通过行动独立发挥作用,但它们是资源集合和个别资源,但仅靠同一类资源运作,纯粹由于“异性恋”,我们将这些观点分成各种观点,通过行动独立运作这两种观点,它们是资源集合和个别资源,但仅因为“异性恋”而使用同一类资源,我们将其分为不同观点。
为了做到这一点,我们或许可以进一步把这些行动一起抽象起来,使它们更容易处理,而这正是抽象的含义。ViewSet视图集。
现在创建基本视图集 :
ModelViewSet所有行为都得到援助。使用一套观点可能是一个非常宝贵的概念,因为它减少了必须准备的代码数量。
但是,出现了新的挑战:如何绘制URL?
如有必要,我们仍可将这一观点与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设计师的参数与设计师的参数相同。此外,也可以使用这种方法来逆向默认操作。list和create。与使用View类相比,使用ViewSet类有两个主要优点。
这并不是说,观点始终是最佳方法,必须考虑一系列类似的权衡:
ViewSet类继承自APIView您可以使用任何标准属性(例如,permission_classes,authentication_classes管理套视图集的 API 政策
它没有带来任何业务上的实现,而且往往需要分门别类和明确规定业务上的实现。
GenericViewSet继承自GenericAPIView,并提供默认的get_object,get_queryset方法和GenericAPIView但是,默认情况下,没有包括任何操作。
它通常需要分门别类或综合所需物品。mixina类,或执行可见的界定程序
ModelViewSet类也继承自GenericAPIView,并通过混合各种mixin这种行为包括执行各种行动。.list(),.retrieve(),.create(),.update(),.partial_update()和.destroy()的实现。
因为ModelViewSetextends继承自GenericAPIView因此,必须在使用时提供。queryset和serializer_class属性
注意,可以使用GenericAPIView例如,任何标准属性或方法都经过修改,以便动态地确定是否应当操作套视图集。queryset,则可以重写get_queryset()方法:
如前所述,路由器必须具体登记。name,当从视图集中删除queryset任何链接的路由器不能在属性之后自动导出模型 。base_name,因此您必须指定base_name作为路由器登记程序的一部分。
回到教程??。
这里就来使用ModelViewSet在获取、发布和删除方法方面,将统一各种分散的与片段有关的类别观点。list,create,retrieve,update和destroy替代。
然而,在片段灯光下拍摄的操作没有标准化。create/update/delete只收集一个片段模式信息领域的行动应被视为自主行动,并被确认为单独行动。@action的装饰。
同时,为了在数据正式储存之前继续添加所有者信息,perform_create()在重写方法时,将保留该方法,但不能作为额外行动。ModelViewSet所继承的CreateModelMixin。
ReadOnlyModelViewSet类也继承自GenericAPIView。它只提供只读操作.list()和.retrieve()。
回到教程??。
我们直接使用它,因为我们不想 存储用户信息 其他地方,但后台。ReadOnlyModelViewSet抽象地看待所有形式的与用户有关的观点:
最后,这些内在观点组合之间的联系如下:
如果有必要以不同于现有固有观点的方式定制业务,则有两种选择:继承业务,规定实现业务,或继承业务,规定实现业务。GenericViewSet它也可以是完全自定义的或混合的。mixin类。
举个例子?:
URL 调度器是Django 路线系统的另一个名称 。
当用户类型对齐时 :
ROOT_URLCONF设置,经常是"对接项目名" 但是,如果它在里面,它就在里面HttpRequest对象由中心预先确定 。urlconf此值将在属性中替换 。ROOT_URLCONF设置)。urlpatterns,它是django.urls.path()与django.urls.re_path()实例的序列。HttpRequest对象的path_info匹配。在这一URL时间表期间,还可以完成更详细的工作:
url标签、视图中的reverse()等函数、模型中的get_absolute_url()扭转URL解释的机制。简而言之,路线系统努力确保正确绘制URL和视图图。
休息框架允许自动的 URL 查看绘图,并提供简单、快速和一致的方法-路由器路由器。
举个例子?:
SimpleRouter。register()将视图设置为 USerViewSet 作为示例 。urlpatterns,等待被请求匹配。实际上register()这种方法还允许第三个参数,这是可选的:base_name目标是手工将l分配到标准路线上。name参数值—— 需要这个值, 没有例外 。base_name时由queryset属性代替,连queryset当你没有它时,你必须明确定义它。base_name。
以下的 URL 模式将因前一示例而生成 :
URL 模式开始于register()表示该方法的第一个参数,并用register()动作, URL URL 方法的第二个参数提供的视图名称register()是给定方法的第三个参数。
当然,这只是最基本的用途,例如:
但urls确实, 返回最简单但最常用的 URL 。
我们可以在路线清单中加上自动产生的路线如下:
如果您想要移动一个路径到 URLconf 模块, 您可以把它与其他的 URL 模块一样公用 。include()函数来实现:
支持命名空间到能够改变路径的程度是合乎逻辑的:
如果您使用带有超链接定序器的命名空间,请确定在定序器上不存在任何超链接定序器。view_name下列参数准确描述命名空间:
一般而言,路由器与成套视图结合使用。 虽然一套视图已经是抽象的,但不可避免地没有必要定制任何功能,在现阶段需要一些装饰器来支持路由器和完成路线绘图:
@detail_route@list_route举个例子?:
如果您不想自定义额外操作来使用自动创建的默认 URL, 您可以在设计器中使用它 。url_path比方说自定义参数?
还可以同时设置url_path和url_name参数为您在创建自定义视图的 URL 上提供更大的灵活性 。
路由器有一个典型的集合。list,create,retrieve,update,partial_update和destroy这些是步骤。观察浓度也可以使用。@detail_route或@list_route装饰标签是另一个路由选项 。
路由器生成以下格式的 URL 。
该路由器类继承自SimpleRouter添加默认 API 根视图, 并使用格式化后缀模式格式化 URL 。
回到教程??。
我们用前面的视图替换了分类视图, 下一步是创建路径图。
在第一个方法中,我们仍然以视觉方式绘制通向特定视图的路线图:我们从请求方法和相应的行动行动开始,通过一组视图开始。as_view()该方法被连接,然后在应用程序 URLconf 模块中逐个插入,该模块的一个特征是能够定义 URL 模式(例如版本号另加显示);
第二个方法是使用路由器使绘图机制自动化。我们需要做的是将路由器指向 URL 的正确视图:
DefaultRouter我们现在可以从视图模块中删除 api_ root 函数, 因为该类会自动为我们建立 API 根视图 。看下一效果:
路由器以相当固定的方式使用,建议不定制路由器类别或独特的定制程序。更多信息,请参见“自定义根” 。
教训到此结束!
更多的练习和积累!
本文由 在线网速测试 整理编辑,转载请注明出处。