自动生成路由,优化路由
from rest_framwork import routers
router = routers.SimpleRouter()
DefaultRouter与SimpleRouter功能类似,不过会自动添加一个根路由(作为获取当前数据的入口)
注册路由
router.register(r’projecs’,views.ProjectViewSet)
第一个参数,是路由的前缀
第二个参数,是视图集类
合并路由
方式一 和我们定义的一样
urlpatterns += router.urls
方式二
urlpatterns = [
path(‘’,include(router.urls)
]
使用视图集中的路由机制,只会为特定的action自动生成路由条路
特定的:
默认自定义的action,不会自动生成路由条目,需要手动添加路由映射 #####通过添加路径,变化,走action
path(‘projecs/names/’,views.ProjectViewSet.as_view({
‘get’:‘names’
}))
视图里的方法
class ProjectViewsSet(viewsets.GenericViewSet):
queryset = Projects.objects.all()
serializer_class = serializers.ProjectModelSerilizer
def names(self,request,*args,**kwargs):
pass
使用装饰器,可以自动生成条目
methods参数默认为get方法,可以在列表中指定多个请求方法
detail 指定是否需要接收模型主键值,如果无需接收主键值,那么需要设置为False,否则设为True,
得到的实例是 projecs/3/names/
url_path 指定生成的路由条目的路径名,默认为action方法名称
url_name 指定生成的路由条目的路由名称,默认为action方法名
@action()
class ProjectViewsSet(viewsets.GenericViewSet):
queryset = Projects.objects.all()
serializer_class = serializers.ProjectModelSerilizer
@action(methods=[‘get’],detail=False)#需要接受值detail=True
def names(self,request,*args,**kwargs):
pass
视图写法
class ProjectViews (ModelViewSet):
queryset = Projects.objects.all().order_by('id')
serializer_class = serializers.ProjectsModelSerializer
filter_fields = ['id', 'name', 'leader']
#search_fields = ['project_id', 'name', 'leader']
def list (self,request,*args,**kwargs):
log.info('正在获取所以项目信息,请求方式:{}'.