首页 > 其他 > 详细

restframework视图集的和自动生成路由

时间:2021-07-08 10:04:15      阅读:27      评论:0      收藏:0      [点我收藏+]

视图集的作用

当一个模型对应多个操作,例如获取单条学生数据和获取所有学生数据。
    如果不使用视图集使用普通视图一个get请求是无法对应多个函数的所以我们需要写两个视图类,比较麻烦。
    如果我们使用视图集的时候我们可以创建多条路由用过方法映射的方式实现我们的需求。
看下面例子!

手动创建路由方法

视图部分

from rest_framework.viewsets import GenericViewSet, ViewSetMixin
from rest_framework.response import Response


# 使用视图集编写
class ViewSetTest(GenericViewSet):

    def getone(self, request, pk, *args, **kwargs):
        return Response(f获取一条PK为{pk}的信息)

    def getall(self, request, *args, **kwargs):
        return Response(获取所有信息)

路由部分

# 手动编写路由的方式
from app01.views import ViewSetTest

urlpatterns = [
    # 填写method和方法的对应关机
    path(all, ViewSetTest.as_view({get: getall})),
    re_path(one/(?P<pk>\d+), ViewSetTest.as_view({get: getone}))
]

测试

技术分享图片

 

技术分享图片

 

自动创建路由方式

视图部分

from rest_framework.viewsets import GenericViewSet, ViewSetMixin
from rest_framework.response import Response
from rest_framework.decorators import action


# 使用视图集编写
class ViewSetTest(GenericViewSet):
    """
    当detail设置为True的时候
    会自动生成类似re_path(‘one/(?P<pk>\d+)‘, ViewSetTest.as_view({‘get‘: ‘getone‘}))的路由
    也就是带id的路由,名字必须叫pk
    """

    @action(methods=[get], detail=True)
    def getone(self, request, pk, *args, **kwargs):
        print(pk)
        return Response(f获取一条PK为{pk}的信息)

    @action(methods=[get], detail=False)
    def getall(self, request, *args, **kwargs):
        return Response(获取所有信息)

路由部分

# 自动创建路由
from rest_framework.routers import SimpleRouter
from app01.views import ViewSetTest

router = SimpleRouter()
router.register(test, ViewSetTest, basename=test)
urlpatterns += router.urls

测试

技术分享图片

 

 

技术分享图片

 

restframework视图集的和自动生成路由

原文:https://www.cnblogs.com/wtil/p/14984220.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!