向路由器或视图集添加更多视图 (Django-Rest-Framework)

2024-03-05

本质上,我试图找到一种在不创建自定义路由器的情况下将更多视图附加到路由器的好方法。有什么好的方法可以实现这个目标呢?

这与我想要实现的目标相当。为了这个问题,变量名已经改变,我想介绍的示例方法也被极其简化。

Router:

router = routers.SimpleRouter(trailing_slash=False)
router.register(r'myobjects', MyObjectViewSet, base_name='myobjects')
urlpatterns = router.urls

ViewSet

class MyObjectsViewSet(viewsets.ViewSet):
""" Provides API Methods to manage MyObjects. """

def list(self, request):
    """ Returns a list of MyObjects. """
    data = get_list_of_myobjects()
    return Response(data)

def retrieve(self, request, pk):
    """ Returns a single MyObject. """
    data = fetch_my_object(pk)
    return Response(data)

def destroy(self, request, pk):
    """ Deletes a single MyObject. """
    fetch_my_object_and_delete(pk)
            return Response()

我需要包括另一种方法类型的一个示例。 (其中有很多):

def get_locations(self, request):
    """ Returns a list of location objects somehow related to MyObject """
    locations = calculate_something()
    return Response(locations)

最终结果是以下 URL 可以正常工作并“干净”地实现。

GET example.com/myobjects/123/locations

The mariodev给出的答案 https://stackoverflow.com/a/18970651/3216056上面是正确的,只要你只想做GET要求。

如果你想POST对于要附加到 ViewSet 的函数,您需要使用action装饰器:

from rest_framework.decorators import action, link
from rest_framework.response import Response

class MyObjectsViewSet(viewsets.ViewSet):

    # For GET Requests
    @link()
    def get_locations(self, request):
        """ Returns a list of location objects somehow related to MyObject """
        locations = calculate_something()
        return Response(locations)

    # For POST Requests
    @action()
    def update_location(self, request, pk):
        """ Updates the object identified by the pk """
        location = self.get_object()
        location.field = update_location_field() # your custom code
        location.save()

        # ...create a serializer and return with updated data...

那么你会POST格式如下的 URL:/myobjects/123/update_location/

http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing如果您有兴趣的话,有更多信息!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向路由器或视图集添加更多视图 (Django-Rest-Framework) 的相关文章

随机推荐

  • 使用 mongo-go-driver,如何有效地从 WriteError 中检索重复的字段名称?

    我的收藏中有三个独特的索引 当用户不小心插入字段中重复的数据时B 我怎么知道重复项来自字段B 在违反唯一索引约束时 mongo go driver 行为返回错误WriteException 它基本上由 WriteError 数组和一些其他对
  • SftpClient.UploadFile 和 SftpClient.WriteAllBytes 有什么区别?

    当我使用 SSH NET 通过 SFTP 传输文件时 我观察到一些奇怪的行为 我正在使用 SFTP 将 XML 文件传输到另一个服务 我不控制 进行处理 如果我使用SftpClient WriteAllBytes该服务抱怨该文件不是有效的
  • 如何在reportlab、python中创建具有不同页面大小的PDF文档

    是否可以在reportlab中创建具有不同页面大小的PDF文档 我想创建一个文档 其中第一页的尺寸与其他页面的尺寸不同 有人可以帮忙吗 是的 这应该是可能的 因为 PDF 支持这一点 这只是如何在 ReportLab 中实现它的问题 我从来
  • Ajp 收到带有签名的无效消息

    我使用的是 Tomcat 7 0 29 前端是 Apache 2 2 22 modproxy 在 httpd conf 中将 Ajp 配置为协议 在 server xml 中将 AjpNioProtocol 配置为 AjpNioProtoc
  • 连接到 pyqtSignal 的 lambda 中对象的生命周期

    假设我有一个对象 并希望在发出 PyQt 信号时执行其方法之一 假设我希望它使用信号未传递的参数来执行此操作 所以我创建了一个 lambda 作为信号槽 class MyClass object def init self model mo
  • 仅使用页面数据通过 Javascript 触发浏览器的“另存为”对话框

    作为页面输出的一部分 我在文本区域中包含了数据表的 CSV 格式版本 以便用户可以轻松地将 CSV 导出复制 粘贴到他们选择的电子表格中 我想要一种方法 有一个按钮 当单击该按钮时 将触发 另存为 对话框 该对话框将下载页面文本区域中已存在
  • 动态数组:使用 realloc() 无内存泄漏

    我使用 realloc 来调整分配的内存大小 char get channel name void char result int n result char 0 for elem snd mixer first elem handle n
  • 在快速中间件中记录请求和响应

    我正在尝试实现一个记录器Express http expressjs com应用 我需要它能够记录请求以及为每个请求发回的响应 状态代码和正文 我开始编写一个如下所示的中间件 function req res next res on fin
  • 从数据库检索数据时如何转义特殊字符?

    我将根据从 SQL Server 返回的数据生成 XML 文件 但有一些特殊字符 例如 x1F and x1C 可能还有其他类似的字符 这将使 XML 失败 有什么办法可以逃离他们吗 Thanks 控制字符 U 001C 文件分隔符 和 U
  • 在Java中一次向ArrayList添加多个项目[重复]

    这个问题在这里已经有答案了 如何一次向 ArrayList 添加多个项目 ArrayList
  • 如何从虚拟环境 (virtualenv) 启动 python Idle

    我有一个从虚拟环境安装的软件包 如果我只是启动 python 解释器 则可以很好地导入该包 但是 如果我启动 Idle 则无法导入该包 因为它仅在一个特定的 virtualenv 中可用 而不是在全局中可用 如何从 virtualenv 启
  • 使用 GDI+ 和 C# 更改图像对比度

    我的问题如下 我正在制作一个程序 可以通过 C 代码操纵亮度 伽玛和对比度 对于亮度和伽玛来说还可以 我已经通过在网上找到的代码实现了它 但我不能进行对比 到目前为止我唯一发现的是CalculateRamp方法 其输入参数 double l
  • 如何使用 JavaScript 更改 div 内容?

    我有简单的 HTML 代码和一些 JavaScript 看起来像
  • Chrome 和可能 Opera 自动对对象属性进行排序

    问题是 Chrome 会自动对对象的属性进行排序 如果我有一个像这样的对象 var obj 4 first 2 second 1 third 然后当我下一步时 for var i in obj console debug obj i 我看到
  • 在网页中嵌入 IRC 客户端的最佳方式

    我正在寻找一个好的 免费的 最好是开源的 IRC 客户端来嵌入网页中 支持大多数浏览器的明显要求是 如果需要插件 则该插件应该是已经广泛部署的插件 并且不应该给提供页面服务的网络服务器带来太大压力 不是一个真正的编程问题 但是Mibbit
  • JQuery - 从数据动态生成图形树视图

    我想动态生成一个树视图来表示应用程序中的用户连接 但我不希望它看起来像普通的树视图 看起来像文件系统结构 如下所示 但更像是这样的流程图 所以基本上我想以比树视图更图形化的方式显示它 如果可能的话 能够放大和缩小 如何才能实现这一目标 你知
  • Blackberry - 具有不同 ID 的可点击 BitmapField

    我正在创建一个应用程序 在其中我通过 JSON 从 Web 服务器获取带有 id 的礼品图像 当我点击任何礼物图像时 它会进入下一页 其中显示该图像的所有信息 通过 JSON 从 Web 服务器获取图像信息及其 ID 问题是 当我点击页面上
  • 轴。即使api返回404错误,如何在try catch finally中获得错误响应

    for e g async gt let apiRes null try apiRes await axios get https silex edgeprop my api v1 a catch err console error err
  • R 上的实时图表 - Shiny

    我正在尝试制作一个交互式图表 在一个闪亮的应用程序上绘制金融股票数据 我的尝试是不断更新数据 从而更新图表 我使用一个名为 Highcharter 的包来管理这个 下面显示了服务器部分的部分代码 getDataIntraday 接收两个输入
  • 向路由器或视图集添加更多视图 (Django-Rest-Framework)

    本质上 我试图找到一种在不创建自定义路由器的情况下将更多视图附加到路由器的好方法 有什么好的方法可以实现这个目标呢 这与我想要实现的目标相当 为了这个问题 变量名已经改变 我想介绍的示例方法也被极其简化 Router router rout