【问题标题】:Data Abstraction Layer between tastypie and Django ORMsweetpie 和 Django ORM 之间的数据抽象层
【发布时间】:2023-03-16 20:24:02
【问题描述】:

我受托为现有的大型代码库创建 API,并决定使用 tasypie。问题出在应用结构上。

我们有一个运行 Djnago ORM 的数据库。该应用程序不直接与 ORM 一起使用,而是通过一组方法(数据抽象层)处理诸如创建 ORM 对象、验证它们等事情。

我想将美味派连接到上述方法以获得限制、身份验证等的所有好处,但我不知道该怎么做。

我尝试为美味派编写一个自定义数据源(就像他们在文档中的 riak 示例),但我对需要覆盖的内容以及每个方法的作用感到非常困惑。

所以,总结一下:

  1. 我将如何在 sweetpie 和 ORM 之间添加一个数据抽象层?
  2. 使用自定义数据源是否正确?
  3. 我将如何创建这样一个自定义数据源?

谢谢。

【问题讨论】:

    标签: python django orm tastypie


    【解决方案1】:

    是的,TasyPie 就是这样做的。基本上,将 API 调用直接连接到 django ORM 功能非常简单。您将使用与您的 Django 模型相关的类,这些类是 TasyPie 的 ModelResource 的子类,并且它处理事情,以便它们开箱即用地快速工作。 但是对于那些想要做一些更定制化的事情的人来说,比如与你的数据抽象层的接口,有一种方法来定制事情。基本上不是使用 ModelResource,而是使用 Resource 类,并且当进行不同的 API 调用时,您必须实现一组方法以使它们与您的数据抽象层一起工作 它在此处的文档中有所描述:

    http://django-tastypie.readthedocs.org/en/latest/resources.html

    文档中给出了一个示例,说明如何在名为

    的部分中实现自定义资源

    在非 ORM 数据源中使用 Tastypie (我会发布链接,但 Stack Overflow 将我限制为 po

    不幸的是,它并没有真正说明代码在做什么,而且解释有点薄恕我直言 这个例子正在为一个名为 Riak 的完全非 ORM No SQL 数据库创建一个自定义接口。如果您正在使用 Riak,或者即使您对 Riak 有所了解,但我不知道,那就太好了。我发现尝试阅读有关两种新技术的代码并弄清楚代码实际在做什么有点令人困惑。

    这里有一个使用自定义资源的更简单的示例,用于教育目的,将 API 调用连接到简单的 python 类:

    https://gist.github.com/nomadjourney/794424

    我根本不是 Tastypie 方面的专家,事实上我才刚开始接触它。 像您自己一样,我需要实现自定义资源,而不是使用开箱即用的简易模型资源。 我还没有成功地做到这一点,但我想我会让你知道我发现了什么。 在 TastyPie 文档中,他们提到编写它的人维护一个活跃的 IRC 频道,他们会在其中帮助您。如果你仍然卡住,如果你在这里没有得到你需要的东西,这可能比 stackoverflow 更好。 祝你好运, 如果我得到一个工作,我会尝试发布一个例子 最好的道格

    【讨论】:

      【解决方案2】:

      另一个比 TastyPie 的非 ORM 示例更容易理解的资源: http://thehungrycoder.com/python/using-non-orm-data-sources-with-tastypie-in-django.html

      【讨论】:

        【解决方案3】:

        我对此进行了更多研究,并发现了解 Resource 方法的作用的最清晰方法是查看 Resource 和 ModelResource 的实际 TastyPie 源代码: https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py

        这显示了它在使用 django 的 ORM 的情况下是如何工作的 它有一些体面的内联文档来解释它。

        即使有了这个文档,发生的事情并不总是很明显,但我所做的是创建一个与 ModelResource 相同的 REsource 子类,然后将日志记录添加到每个方法并操作 API 以查看调用了哪些方法以及它们是什么做。 然后我会慢慢地,一步一步地改变方法来实现我自定义的、非 ORM 的行为。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-21
          • 2012-11-22
          • 1970-01-01
          • 2012-03-04
          • 1970-01-01
          相关资源
          最近更新 更多