Python路由Router
视图集极大地简化了我们写视图的代码,但是路由中还是有较多的重复代码,可供我们优化。回忆一下我们在视图集中写的 URL 路由代码: # 同一个视图类中,不同的视图方法加载多个不同的序列化器一般都是视图集在使用这个功能。 urlpatterns = [ path("sera/students/", views.Student2ModelViewSet.as_view({ "get": "list", "post": "create" })), re_path("^sera/students/(?Pd+)/#34;, views.Student2ModelViewSet.as_view({ "get": "retrieve", "put": "update", "delete": "destroy", })), ]
上面 Student2ModelViewSet,我们没必要在路由中编写。对于已经继承了 Viewset 的视图集,我们工作中一般使用路由类自动生成路由信息即可。
对于视图集 ViewSet,我们除了可以自己手动在路由 url.py 中设置当前客户端的 http 请求方式与动作 action 之间的对应关系外,在 drf 中还可以使用 Routers 路由类来自动帮我们快速生成视图集的路由列表。
REST framework 提供了两个 router 路由类,这两个路由类几乎没区别。后面我们讲下他们的小区分。 SimpleRouter DefaultRouter 使用方法
路由的使用分三个步骤: 引入路由类并初始化创建 router 对象 from rest_framework.routers import DefaultRouter, SimpleRouter router = SimpleRouter()
DefaultRouter 会比 SimpleRouter 多出一个调试界面,列出当前子应用下所有的路由类的视图集接口地址。除此之外,大家用法一致。
2.注册视图集到路由类中,例如: router.register("router/students", views.Student2ModelViewSet, basename="sera-student")
register(prefix, viewset, base_name) 参数解释: prefix 该视图集的访问地址路由前缀 viewset 视图集类,不要加 as_view!!! basename 路由别名的前缀,一般把 URL 地址前缀复制过来,然后遇到斜杠 / 改成横杠 - 如上述代码会形成的路由如下: students/ ^router/students/$ [name="students-list"] students/ ^router/students/(?P[^/.]+)/$ [name="students-detail"]
3.把路由类生成的路由信息合并到路由列表 urlpatterns 中。因为 django 只认定 urlpatterns 这个变量名:
有两种方式: urlpatterns = [ ... ] urlpatterns += router.urls
使用路由类给视图集生成路由地址,视图集代码无需改动,保持原样即可: from rest_framework.viewsets import ModelViewSet,ReadOnlyModelViewSet class StudentModelViewSet(ModelViewSet): queryset = Student.objects.all() serializer_class = StudentModelSerializer def login(self,request): """学生登录功能""" print(self.action) return Response({"message":"登录成功"})
路由代码: from django.urls import path, re_path from . import views urlpatterns = [ ... ] """使用drf提供路由类router给视图集生成路由列表""" # 实例化路由类 # drf提供一共提供了两个路由类给我们使用,他们用法一致,功能几乎一样 # 在这个例子中,浏览器访问127.0.0.1:8000/students时, # SimpleRouter会出现报错大黄页,DefaultRouter会出现调试页面 from rest_framework.routers import DefaultRouter router = DefaultRouter() # 注册视图集 # router.register("路由前缀",视图集类,别名前缀) router.register("router/students", views.Student2ModelViewSet,basename="sera-student") # 把生成的路由列表追加到urlpatterns urlpatterns += router.urls
面的代码就成功生成了路由地址(增 / 删 / 改 / 查一条 / 查多条的功能),但是不会自动我们在视图集自定义方法的路由。
如果我们需要给自定义方法生成路由,则需要进行 action 动作的声明,比如 [通过 action 装饰器声明视图集中新定义类方法](drf-view-set.md# 通过 action 装饰器声明视图集中新定义类方法)。
亚马逊跨境电商平台,你必须要知道的规则亚马逊跨境电商平台,你必须要知道基本规则我们都知道,亚马逊跨境电商平台是一个非常注重管理的平台,平台独有的A9算法更是力求为每一个开店的卖家进行公平的流量分配。亚马逊重产品轻店铺这
人生只能不断前进经常会有人考虑这个问题人生究竟是什么呢?难道就像是苏东坡所感慨的人生到处知何似,应似飞鸿踏雪泥般的变幻无常还是像莎士比亚所讲像一个白痴所讲的故事,满是声响和愤激,毫无意义呢?不,对
双输?神塔离队老东家内线被锤爆自己在新东家打不上上赛季,山西男篮以第9名的身份进入季后赛。季后赛附加赛中,山西男篮击败广州男篮,闯进八强。四川男篮仅取得12胜26负的战绩,位居第16,是不折不扣的鱼腩。但新赛季,双方的首场比赛,
测评SKGT5S颈椎按摩仪办公室打工人激情安利!每天办公低头久坐肩颈部位真的不太行,经常会去盲人按摩,又感觉太疼最近收到SKGT5S颈椎按摩仪,力度可以随心调整,试用感觉很棒!而且非常人性化的一点是这个按摩
积家宣布与字体设计艺术家ALEXTROCHUT开展全新艺术合作每日珠宝网讯积家宣布与字体设计艺术家AlexTrochut展开全新合作,继续拓展创新与文化边界,开启大工坊名家造艺(MadeofMakers)的最新篇章。字体设计艺术家AlexTr
十月,秋光向晚,天凉心生暖文丨谭旭颖白露的露带着丝丝新凉,寒露的露又将凝成新霜。光阴总是这样匆匆而行,又是一年寒露至,枫红菊黄深秋时。寒露是二十四节气中的第十七个节气。月令七十二候集解中说九月节,露气寒冷,
等我们老了,还有人一起散步,真好01hr有人说好友是一辈子的,也有人说世上没有永远相携走过一生的朋友,天下没有不散的筵席,总有各奔东西的一天。确实,有些时候并不是本意,可我们却被迫分别,去往不同的城市。慢慢地,联
花费了1000亿美元之后,自动驾驶汽车领域仍然是一片废墟自动驾驶汽车一直是一场骗局。就在一年前,当时优步(Uber)宣布巨额亏损。优步的盈利故事总是这样的当然,我们现在是在亏损,但一旦我们创造出自动驾驶汽车,我们就可以解雇司机,大赚一笔
物联网运营管理系统开发最近应客户要求,在做一套物联网卡运营管理系统。主要业务是对接运营商,进行物联网卡的流量管理。同时将运营商获取物联网卡片通过前台网站商城进行售卖。功能包括1。用户管理用户是系统操作者
IMF总裁必须采取果断行动,将通胀恢复到目标水平当地时间13日,国际货币基金组织(IMF)总裁格奥尔基耶娃(KristalinaGeorgieva)在总裁的全球政策议程(TheManagingDirectorGlobalPlic
华为P50Pro8256G已给国人降1800元,良心回来了在日常生活或者工作中,你会不会因为手机没信号或者说信号不稳定而心烦?简单来说,手机信号有两个影响因素,第一是电话卡运营商不同信号质量不同,毕竟三大运营商在基站技术设备这些方面不一样