【问题标题】:What is the best way to add an API to a Django application?将 API 添加到 Django 应用程序的最佳方法是什么?
【发布时间】:2010-11-07 01:31:00
【问题描述】:

我正在向 Django CMS 添加 MetaWeblog API 支持,但不太确定如何对应用程序分层。

我正在使用 django_xmlrpc,它允许我为每个请求映射到参数化函数。这只是我在从服务功能(AddPage、EditPage 等)调用 django 应用程序时挂钩的级别的一个例子

对于 django-page-cms,我想很多 django 应用程序,业务逻辑和验证都包含在表单中。在这种情况下,有 PageForm(forms.ModelForm) 和 PageAdmin(ModelAdmin),它们都包含大量的逻辑和验证。

如果我要构建 API 以允许维护页面和内容,这是否意味着我应该以编程方式创建和填充 PageAdmin 实例?然后捕捉任何异常,并转换为它们的 api 等价物?或者这是一个坏主意 - 滥用表格的用途?

另一种选择是重构代码,以便将业务和逻辑保留在表单类之外。然后我会得到表单和 api,两者都通过单独的业务逻辑。

还有其他选择吗?

最好的解决方案是什么?

【问题讨论】:

    标签: python django api django-models django-admin


    【解决方案1】:

    似乎 python 没有提供这个开箱即用的功能。但是有一个叫做 abc 模块的东西:

    我引用http://www.doughellmann.com/PyMOTW/abc/“通过定义一个抽象基类,您可以为一组子类定义一个公共API。此功能在第三方将提供实现的情况下特别有用......” => API 的目标,定义合约。

    【讨论】:

      【解决方案2】:

      Web 服务 API 只是更多的 URL。

      这些 WS API URL 的映射来查看函数。

      WS 视图函数处理 GET 和 POST(可能还有 PUT 和 DELETE)。

      WS 视图函数使用表单和模型来实现。

      在某种程度上,它就像一个管理界面。除了,没有 HTML。

      WS 视图函数以 JSON 消息或 XML 消息进行响应。

      【讨论】:

      • 我已经启动并运行了 Web 服务。这是我的应用程序中的哪个级别的情况。因此,例如,对于我的服务函数 AddPage(),您将生成管理表单以编程方式填充并保存?
      • 我不知道“管理员表单”是什么。我确实知道什么是模型表单 (docs.djangoproject.com/en/dev/topics/forms/modelforms/…) 如果您的意思是 ModelForm,那么是的。您使用模型表单来验证输入、创建模型实例并将对象保存到数据库中。
      • cms 的层级依次为 PageAdmin(ModelAdmin) > PageForm(ModelForm) Page(Model)。目前,更新内容的唯一方法是通过管理区域。看起来最好的解决方案是让我的 Web 服务使用 PageForm,然后进行一些重构,以便 PageAdmin 不会重复相同的业务逻辑和验证。
      • @Andrew Rimmer。您可以编写自己的视图函数来更新 Web 服务。内置的管理应用程序返回 HTML 页面,这对于 Web 服务请求来说并不是一个很好的选择。编写你自己的视图函数——它更简单。
      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2021-09-15
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多