如何从另一个 Python 应用程序调用 Django 应用程序?

How can I call a Django app from another Python app?

在标准设置中,Django 应用程序由 WSGI server (like gunicorn and mod_wsgi) 调用以响应 HTTP 请求,用户级别的入口点是 django 视图。
我可以创建自定义入口点来调用 Django 应用程序吗?如果是这样,我如何正确加载 Django 应用程序?

编辑: 查看 wsgi.py file made by the startproject command, I see that 1) it sets the DJANGO_SETTINGS_MODULE var and calls get_wsgi_application 中的入口点,其中 2) 调用 django.setup() 和 3) returns 一个 WSGI 应用程序将由 WSGI 服务器调用。当 django 的管理命令是 运行 时,也会发生 1 和 2。 执行 1 和 2 并正确加载 Django 应用程序是否足够? 在 3 时,django 的中间件已加载,但它们不兼容,因为我不会进行 HTTP 调用(但Django 应用程序当然会响应来自其他客户端的 HTTP 请求。

Is it enough to do 1 and 2 and have a properly loaded Django app?


看Django的源码,this documentation, I figured out how to load a Django app. Taking as example the Django's intro tutorial, I could load the polls app and call its index view是这样的:

# Let Django knows where the project's settings is.
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

from django.apps import apps
# Load the needed apps
apps.populate(installed_apps=['polls.apps.PollsConfig'])
# Make sure the above apps were loaded
apps.check_apps_ready()
apps.check_models_ready()

# Call it
from polls.views import index
# Here index view is decoupled from Django's HTTP interface, so in polls/views.py you have:
# def index():
#     return Question.objects.order_by('-pub_date')[:5]
print('index view: ' + str(index()))

它不加载任何 Django 中间件(它们与 HTTP 接口耦合)。民意测验应用程序不依赖于其他已安装的应用程序,否则也应加载所有依赖项。