栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在路由器上注册一个视图(不是视图集)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在路由器上注册一个视图(不是视图集)?

路由器可与一起使用

ViewSet
,并且不是为普通视图设计的,但这并不意味着你不能在普通视图中使用它们。通常,它们与模型(和
ModelViewSet
)一起使用,但在不使用它们的情况下,也可以使用
GenericViewSet
(如果通常使用
GenericAPIView
)和
ViewSet
(如果仅使用
APIView
)使用它们。

对于列表视图,请求方法映射到这样的

ViewSet
方法

  • GET
    ->
    list(self, request, format=None)
  • POST
    ->
    create(self, request, format=None)

对于详细视图(URL中带有主键),请求方法使用以下映射

  • GET
    ->
    retrieve(self, request, pk, format=None)
  • PUT
    ->
    update(self, request, pk, format=None)
  • PATCH
    ->
    partial_update(self, request, pk, format=None)
  • DELETE
    ->
    destroy(self, request, pk, format=None)

因此,如果要在路由器上的视图中使用这些请求方法中的任何一种,则需要覆盖正确的视图方法(因此,list()而不是get())。

现在,特别是在你的情况你会正常使用的

APIView
,看上去像

class UpdateTimeView(APIView):    def get(self, request, format=None):        latest_publish = Publish.objects.latest('created_time')        latest_meeting = Meeting.objects.latest('created_time')        latest_training = Training.objects.latest('created_time')        latest_exhibiting = Exhibiting.objects.latest('created_time')        return Response({ "publish_updatetime": latest_publish.created_time, "meeting_updatetime": latest_meeting.created_time, "training_updatetime": latest_training.created_time, "exhibiting_updatetime": latest_exhibiting.created_time,        })

可比的

ViewSet

class UpdateTimeViewSet(ViewSet):    def list(self, request, format=None):        latest_publish = Publish.objects.latest('created_time')        latest_meeting = Meeting.objects.latest('created_time')        latest_training = Training.objects.latest('created_time')        latest_exhibiting = Exhibiting.objects.latest('created_time')        return Response({ "publish_updatetime": latest_publish.created_time, "meeting_updatetime": latest_meeting.created_time, "training_updatetime": latest_training.created_time, "exhibiting_updatetime": latest_exhibiting.created_time,        })

注意两个必需的更改:

APIView-> ViewSet
get-> list
。我还更新了名称,以表明它不仅仅是普通视图(因为
ViewSet
不能以相同的方式初始化),但这不是必需的。

因此,有了这个新视图,你可以像其他任何方法一样在路由器中注册它。你需要在base_name此处创建一个url名称(通常会从queryset中提取)。

router.register(r'updatetime', views.UpdateTimeViewSet, base_name='updatetime')

因此,现在

updatetime
可以在API根目录中使用该端点了,你只需调用端点即可获得最新时间(一个简单的GET请求)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/420444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号