Django - 使用从类似 REST 的 API 检索的数据构建报告的应用程序

Posted

技术标签:

【中文标题】Django - 使用从类似 REST 的 API 检索的数据构建报告的应用程序【英文标题】:Django - app to build reports using data retrieved from a REST-like API 【发布时间】:2012-09-25 18:58:40 【问题描述】:

我一直在构建一个 Django 应用程序,该应用程序使用来自一个扩展的类似 REST 的 API 的数据。 API 是使用 .NET 构建的(糟糕!不是我的选择),因为我宁愿挖出我的眼球也不愿学习微软工具(我是 *nix/OSX 人),因为我不想要前端为了影响 API,反之亦然,我选择在另一台服务器上使用 Django 构建前端。

Django 站点充当主 DB/API 和最终用户之间的中间人。 API 中的所有数据都不会保留在 Django 站点中,它只是以一种很好的人类可读格式重新格式化/显示所述数据。现在我已经构建了我的 API 客户端和所有视图,我正在寻找创建一个报告生成器。

是否有任何应用程序可以创建临时模型来表示来自 API 调用的对象?我希望能够在从 API 接收的 JSON/XML 数据之间创建关系,但不需要在我的 Django 站点中复制数据库结构,那将是多余的。

最终目标是让用户能够根据来自数据 API 的请求创建/保存自定义过滤报告。任何建议将不胜感激。 (请不要回复“只需在 Django 中复制模型,然后插入从 API 检索到的数据”。这将完全抵消让 DB/API 在与前端不同的服务器上运行的意义。

注意 - 我已经查看过 note 的 Dark,但是由于缺乏关于它的文档,并且缺乏关于依赖的“docu”库的文档,我真的不知道它是否对我有任何好处。如果您有任何如何使用它们来解决此问题的示例,请告诉:)

【问题讨论】:

可能相关:***.com/questions/1290891/… 我正在使用 django-tables 进行调查:django-tables2 似乎我可以使用它来实现我的目标 很酷,但对解决我的问题并不是很有用 【参考方案1】:

这是一个我认为可能有效的 hack。

首先,除了您拥有的任何其他数据库之外,还定义一个虚拟数据库后端:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mydatabase'
    ,
    'dummy': 
        'ENGINE': 'django.db.backends.dummy',
        'NAME': 'dummy'
    

然后按照您的意愿定义您的非数据库模型。从那里你有 using 功能可以告诉 Django 为该调用使用特定的后端,并请求使用虚拟后端:

objs = YourModel.objects.using('dummy').all()

或者,您也可以不使用save()'ing 直接创建对象。

【讨论】:

有趣的想法。也许我真正在寻找的解决方案是自定义数据库后端(类似于 Cocoa 核心数据中的 InMemoryStore) 我看到了虚拟缓存后端的文档,但没有看到虚拟数据库后端的文档。这是在哪里记录的? 据我了解,虚拟数据库后端对我们没有好处,除非您制作自己的版本,它只是一个默认的虚拟类。通读定义类的代码,它会在大多数方法上抛出异常(通知您尚未设置数据库)【参考方案2】:

我实际上最终找到了解决这个问题的方法,很久以后哈哈。

谢谢djangopackages.com!!!

显然,我正在寻找一个术语,ROA(面向资源的架构)。这是来自 Ruby on Rails 世界的范例。有一个 django 应用程序可以处理这个问题,称为 django-roa

所以我会尝试一下,感谢@Yuval Adam 的尝试

【讨论】:

以上是关于Django - 使用从类似 REST 的 API 检索的数据构建报告的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

django-rest-framework - 在可浏览的 API 中自动生成表单?

使用 Django 访问没有表单(REST api)的 POST 字段数据

使用 Axios 从前端访问 Django Rest API 时出现 Cors 错误

Django REST API 注销请求

如何使用flutter Dropdown小部件从Django REST API端点填充数据

如何从 android 客户端进行经过身份验证的 django rest api 调用?