视图类必须是ViewSetMixin的子类才能自动生成路由。
方式一:
DefaultRouter() 会生成一个根路由 / 根里会显示可以访问哪些路由。
SimpleRouter() 不会生成根路由,其他的两个都一样。
方式二:
路由分发include
对象register方法有三个参数。register('book',views.Book_APIView,'book')
参数一、 prefix, 前缀
参数二、 viewset, 视图类
参数三、 basename=None 别名。
视图类中重写某个方法:
以后再修改某个方法继承Five_Methods就可以了。
*******在子类中写自己的属性和方法"派生",子类也叫派生类。*******
1、用action有参装饰器自动生成路由。
detail=False #查询所有。 生成的路由是: /前缀/函数名 GET方法才触发它。
detail=True # 查询单条 生成的路由是:/前缀/3/函数名/
视图类中有个action属性,是本次请求执行的函数名。这个action属性是ViewSetMixin里的。
@action(methods=['GET',],detail=True,url_path='login') # url_path是路径的名称
def login(self,request,*args,**kwargs): # GET请求执行login
print(self.action) # 这个action 是对象的属性,不是装饰器,它是本次请求执行的函数名。
print(kwargs) # detail=True 才有pk,反之就没有。可以查它的详情。
return Response('登录成功')
总结:
自动生成路由的视图类:继承ViewSetMixin或它的子类+九个视图子类。 因为ViewSetMixin没有方法。
action装饰器自动生成路由的视图类:继承ViewSetMixin或它的子类+APIView或者GenericAPIView。
浙公网安备 33010602011771号