一、自动生成路由
urls.py
# 第一步导入routers模块
from rest_framework import routers
# 第二步实例化类
router=routers.SimpleRouter()
# routers.DefaultRouter() 生成的路由更多
# 第三步注册
router.register('books', views.BookViewSet)
# router.register('前缀','继承自ModelViewSet视图类','别名')
# 第四步获取自动生成的路由
router.urls # 自动生成的路由,返回的是一个列表
# 第五步,将路由增加入urlpatterns中
urlpatterns+=router.urls
二、action装饰器
'''
1. 在视图类中,我们总结前后,最终实现继承ModelViewSet实现五接口
2. 但同时,我们需要在路由中as_view()中增加actions参数,如此才能实现请求方式与方法绑定,做到什么请求方式,执行什么方法
在使用自动生成路由时,我们发现,自动生成的路由都有其固定的规范,无法实现actions参数的功能,我们也无法给自动生成的路由直接添加actions参数
此时,就出现了action装饰器,写在需要装饰的函数上面(有点鸡肋!)
'''
views.py
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action
class xxx(ModelViewSet):
queryset = 模型表对象
# queryset = models.表名.objects
serializer_class = 模型表对象
# serializer_class = ZzwSerializer
@action(methods=None, detail=None, url_path=None, url_name=None, **kwargs)
def xxx(self, request):
pass
'''
methods=['post', 'get', 'put', 'patch'] 写入请求方式
detail=None 填入bool值,用于判断是否生成主键参数
注意:router.register('books', views.BookViewSet)
False: ^books/xxx/$ [name='book-get-1']
True: ^books/(?P<pk>[^/.]+)/xxx/$ [name='book-get-1']
'''