在Django外使用模型和表单?

8 投票
3 回答
2352 浏览
提问于 2025-04-15 22:04

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

3 个回答

0

在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 的错误。

1

在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')

接下来,你就可以开始导入你的模型了。

11

这是可能的。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")。 参考链接

撰写回答