一、视图集ModelViewSet自动生成路由:
1、导入routers模块
from rest_framework import routers
#SimpleRouter(一般都使用这个)
#DefaultRouter(生成路由比较多)
2、实例化路由类,得到对象:
router=routers.SimpleRouter()
3、注册路由
’‘’
#register('前缀‘,views文件中我们自定义的视图集函数,别名)
#url(r'^book/',views.UserModelSet),前缀就等价于url的 book
‘’‘
router.register('book',views.UserModelSet)
4、加入到原路由:
urlpatterns +=router.urls
生成接口如下:
#put、get、delete请求方法
http://127.0.0.1:8000/app04/book/pk/
#get、post请求
http://127.0.0.1:8000/app04/book/
完整代码如下:
#urls.py文件
from django.conf.urls import url
from rest_framework.routers import SimpleRouter,DefaultRouter
from app04 import views
#实例化对象
route=SimpleRouter()
#注册路由
route.register('book',views.UserModelSet,)
urlpatterns = [
]
#添加路由
urlpatterns +=route.urls
views.py文件
from app04.models import User,UserToken
from app04.ser import UserSer,UserToken
from rest_framework.viewsets import ModelViewSet
# Create your views here.
class UserModelSet(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSer
二、给视图类中自定义函数添加路由
1、导入一个action装饰器
from rest_framework.decorators import action
2、在自定义函数中添加action装饰器
class UserModelSet(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSer
'''
methods参数对应是一个列表,用来放请求方法
detail=false,接口连接如下
#^book/get_2/$ [name='book-get-1']
detail=True
#^book/(?P<pk>[^/.]+)/get_2/$ [name='book-get-1']
detail:是决定是否带pk
methods是请求方法
'''
@action(methods=['get'],detail=False)
def get_2(self,reqeust):
user=self.get_queryset()[0:2]
ser=self.get_serializer(user,many=True)
return Response(ser.data)
最终给自定义get_2方法添加的路由如下:
http://127.0.0.1:8000/app04/book/get_2/
http://127.0.0.1:8000/app04/book/pk/get_2/