6、路由自动配置
一、drf之路由
1、自动生成路由
from django.contrib import admin
# 1、导入
from django.urls import path, include # 路由分发
from rest_framework.routers import DefaultRouter, SimpleRouter
# 2、实例化得到对象
router = SimpleRouter()
# 3、注册路由
# 参数一是路径,参数二是视图类(必须继承ViewSet及子类),参数三是别名(反向解析使用)
router.register('books', views.BookView, basename='books')
router.register('pub', views.PubView, basename='publish')
urlpatterns = [
path('admin/', admin.site.urls),
# 4、把自动生成的路由添加到总路由中(方式一:路由分发方式)
path('', include(router.urls)),
]
# 4、自动生成的路由添加到总路由中(方式二:列表相加)
urlpatterns += router.urls
'''
path('api/', include(router.urls)),
path('api/v1/', include(router.urls)),
路由分发的方式添加,还可以在前面添加路径,这样在网址里就要输入前面的路径再加上注册路由的路径,如
http://127.0.0.1:8000/api/pub/
另外自动生成路由还有另外一个DefaultRouter,这个就只是比我们用的SimpleRouter多一个根路径(首页),
也就是你访问http://127.0.0.1:8000/,会显示所有支持的路由
'''
2、actions
我们字段继承ViewSet类,可以给方法取别名。然后在路由配置下,让起别名的方法用什么方式请求。
如果用自动生成路由的方式写路由,那么路由该怎么知道起了别名的方法应该用什么方式请求呢,这里就需要用到actions装饰器了
from rest_framework.decorators import action # 导入装饰器
# 视图函数
class TestView(ViewSet):
# @action(methods=['GET', 'POST'], detail=False, url_path='login', url_name='login')
@action(methods=['GET', 'POST'], detail=False) # 后面两个参数可以不带,简写为这样
def login(self, request):
return Response('登录成功')
'''action参数介绍
methods:做一个映射,就是http的请求方式,就会映射当前方法
detail:True -test/login/ 或 False -^test/pk/login
url_path:访问的路径,可以不写,如果不写,以方法名作为路径 通过get请求访问这个路径test/login就能触发login的执行
url_name:起个别名
'''
# 路由
router.register('test', views.TestView, basename='testview')

浙公网安备 33010602011771号