【问题标题】:Using Models and Forms outside of Django?在 Django 之外使用模型和表单?
【发布时间】:2010-04-27 14:17:42
【问题描述】:

是否可以在 Django 环境之外使用 Django 模型和表单运行视图文件?

【问题讨论】:

  • 您想使用视图、ORM 和表单框架 - 为什么不直接使用所有 Django?
  • @Dominic 因为我不想返回 HttpResponses
  • 您应该将环境响应(Twisted?)导入 django 并在此处返回。

标签: python django django-models


【解决方案1】:

这是可能的。 Django 非常擅长直接 python 没有太多魔法,所以你通常可以解耦。视图只是函数,可以从任何其他 python 代码中调用。

要使用 ORM,您必须在脚本中设置 django 环境。查看“manage.py”文件显示了如何执行此操作:

from django.core.management import setup_environ
import settings
setup_environ(settings)

现在,你可以调用任何你想要的视图:

from myapp.views import some_view

some_view(...)

请记住,约定是视图函数将 HttpRequest 对象作为其第一个参数,并返回一个 HttpResponse 对象。您可以自己构建一个请求对象:

from django.http import HttpRequest

result = some_view(HttpRequest(), ...)

但是,如果您真的对使用 HttpResponse 或 HttpRequest 对象不感兴趣,也许您不应该将您的方法称为“视图”。也许它们是“实用程序”或其他东西。这些都不是 Django 强制执行的,但是遵循这样的约定是一种很好的形式,这样其他程序员就可以阅读您的代码。

编辑: 2010-05-24:修复了“setup_environ”(之前错误地有“execute_manager”)。 Reference.

【讨论】:

  • 这太有用了。谢谢你。它真的应该包含在 Django 书或类似的东西中。我一直在试图弄清楚如何利用模型 API 轻松地将一些数据加载到数据库中,而这正是我所需要的。再次感谢。
  • 嗨,我遇到了错误:from django.core.management import setup_environ ImportError: cannot import name setup_environ
【解决方案2】:

在 Django 1.6 中,这可以通过将项目目录放在路径中来简单地完成,然后设置 DJANGO_SETTINGS_MODULE 环境变量,如下所示:

import sys
import os

sys.path.append(path_to_the_project_dir)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')

然后,您就可以开始导入模型了。

【讨论】:

    【解决方案3】:

    在 Django 1.7 中,你还需要这样做:

    import sys
    import os
    
    sys.path.append(path_to_the_project_dir)
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
    
    import django
    django.setup()
    

    否则,您将遇到AppRegistryNotReady 异常。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2016-03-21
      • 2012-04-24
      • 2013-08-06
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2014-03-30
      相关资源
      最近更新 更多