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')
posted @ 2021-09-09 21:59  黑影Poco  阅读(110)  评论(0)    收藏  举报