在Django外使用模型和表单?
在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")。 参考链接。