[Django]路由实现

本文介绍了Django中如何使用SimpleRouter和DefaultRouter自动生成路由,并展示了注册路由和合并路由的不同方法。详细讨论了视图集中的action装饰器,如何为特定action手动添加路由映射,以及detail参数、methods参数、url_path和url_name的用法。
摘要由CSDN通过智能技术生成

自动生成路由,优化路由
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('正在获取所以项目信息,请求方式:{}'.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值