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 装饰器声明视图集中新定义类方法)。
长岛和汪明荃尹浩洋和长岛的采访故事(之四)文尹浩洋文章的题目怎么叫长岛和汪明荃?他俩怎么能扯到一起?这就要说到上篇文章提到的那个重要代表团了。1992年岁末,我以烟台晚报记者的身份第一次进长岛采访。当时我们陪去的这个代表团
空心村变成艺术村重庆璧山艺术乡建激活乡村振兴一池春水朝阳洒在璧北河畔,刚盛开的油菜花芬芳扑鼻,漫步在金色花丛中,人偶微雕绿地雕塑等艺术作品随处可见,引人无限遐思,乡村美术馆咖啡厅不时传来游客阵阵欢笑新春伊始,正在开展社会实践的清华大
周厉王开启魔盒,从此西周王朝走向灭亡一天,有两条神龙降临在帝王的宫殿,神龙说我们是余褒国的先君。夏帝找来卦师问吉凶,卦象结果无论是杀掉二龙或者赶走它们还是留它们都不吉利,又问仍是凶卦,再问,神说将二龙的唾液收藏起来。
明日方舟叔叔双UP卡池的实用小tips等198自选似乎更加稳妥明日方舟对于这次开放的叔叔和凯尔希的双UP卡池,估计不少玩家跳坑了,抽卡之后的直接体感,就是几家欢喜几家愁,很真实也有点小残酷,估计还有不少玩家准备好了二战叔叔的这次双UP卡池,这
MOBA游戏十大猛女这一次我们就来盘点一下MOBA游戏的10大猛女。贝罗娜是罗马神话中的战争毁灭与破坏女神,是大名鼎鼎的马尔斯的妻子。而罗马的一个古老节日鲜血之日就与贝罗娜有关。在神之浩劫中,贝罗娜是
小锤推游这可能是你玩得最好的一款丧尸题材游戏!Hello大家好!又到了每天小锤推荐游戏环节了哈哈哈!今天推荐的游戏想必有的兄弟们听过名字僵尸毁灭工程(英文名ProjectZomboid)。有没有想起行尸走肉!僵尸毁灭工程是一款
再论少阳病少阳病伤寒论六经病之一病证名,伤寒论六经病之一。是指以口苦,咽干,目眩,往来寒热,胸胁苦满,默默不欲饮食,心烦喜呕,脉弦为主症的病变。属于病位既不在表,又未入里的半表半里证,临床上
神奇的聚泉穴,又称增液穴,中医说可以生津止渴,这是真的吗?健康2023聚泉穴又被人称为增液穴,中医认为本穴是一个具有良好生津止渴功效的穴位,是一个擅长治疗口干口苦的穴位。今天,我想和大家一起,走进这个位于我们人体舌头上的聚泉穴。了解一下这
每天喝咖啡究竟会怎样呢?咖啡作为世界上最受欢迎的饮品之一,自然而然地引发了对它对人体健康的影响的关注。许多研究已经探究了咖啡的影响,有些结果表明适量饮用咖啡对身体有好处,而另一些研究则提出了一些警告。那么
短道速滑世界杯多德雷赫特站林孝埈王晔分别晋级男女1000米半决赛2月11日,在20222023赛季国际滑联短道速滑世界杯荷兰多德雷赫特站男子1000米四分之一决赛中,中国选手林孝埈以1分23秒824的成绩晋级半决赛。林孝埈在比赛中。林孝埈在比赛
信使报米兰和国米可能邀请萨里执教直播吧2月12日讯据意大利信使报报道,米兰和国米都可能邀请萨里执教。64岁的萨里是意大利教练,此前曾执教过那不勒斯尤文切尔西等球队,目前萨里担任拉齐奥主帅。本轮意甲联赛前拉齐奥在意