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

问题描述 投票:0回答:1

[在标准设置中,WSGI服务器(如gunicornmod_wsgi)调用Django应用程序来回答HTTP请求,用户级的入口点是django View。我可以自定义calling convention来调用Django应用(新的入口点)吗?如果是这样,如何正确加载Django应用?

Edit:查看startproject命令在wsgi.py文件中的入口点,我看到1)设置DJANGO_SETTINGS_MODULE var并调用get_wsgi_application,其中2)调用django.setup()和3 )返回将由WSGI服务器调用的WSGI应用程序。运行django的admin命令时也会发生1和2。 是否足以执行1和2并具有正确加载的Django应用程序?在3时,django的中间件已加载,但它们不兼容,因为我将不会进行HTTP调用(但是Django应用程序将当然,请回答来自其他客户端的HTTP请求。

python django interface integration calling-convention
1个回答
0
投票

是否足以执行1和2并具有正确加载的Django应用?

通过查看Django的源代码和this documentation,我了解了如何加载Django应用。以Django的intro tutorial为例,我可以加载民意调查应用并通过以下方式调用其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接口)。民意调查应用程序不依赖于其他已安装的应用程序,否则所有依赖项也应加载。

© www.soinside.com 2019 - 2024. All rights reserved.