gpt4 book ai didi

python - 如何从另一个 python 脚本启动 Django 应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:58 26 4
gpt4 key购买 nike

我的 Python 应用程序有多个不同的用户界面,它们在运行时注入(inject),其中之一是 Django 应用程序。

注意 - 这不是生产应用程序。这仅供我自己在自己的电脑上使用。我根本不担心安全问题。

例如,我有一个 CLI 用户界面,以及一个 Django UI。我的主文件是这样的:

def main():
config , test_config = load_test_config(Config, TestConfig)
user_interface = None
if config.user_interface() == "cli":
from frontend.Cli import Cli
user_interface = Cli()
elif config.user_interface() == "django":
from frontend.Django import Django
user_interface = Django()

app = TradingApplication(user_interface)
app.start()

if __name__ == "__main__":
main()

目前该应用程序非常简单:

# This is the main application that gets fired up.

class TradingApplication(object):

# We inject the UI, this could be a CLI or a web app, or desktop app etc.
def __init__(self, user_interface):
# Save and register UI with the app
self.user_interface = user_interface

# Start the UI and feed the app in as well, so the UI can make calls into the app
def start(self):
self.user_interface.run(self)

它所做的只是调用用户界面并传递对其自身的引用,以便 UI 可以联系应用程序。

Django.py 文件与我正在构建的其他可能的前端一起位于名为“frontend”的子目录中。 Django 类尝试像这样启动:

import os
import sys

class Django(object):

def __init__(self):
pass


def run(self, app):
self.app = app
os.chdir("./frontend")
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'frontend.frontend.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc

execute_from_command_line(['manage.py', 'runserver'])

但我收到此错误:

bash /usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python: can't open file 'main.py': [Errno 2] No such file or directory

我认为这与execute_from_command_line方法期望作为ma​​in运行,或类似的东西有关。

我对替代解决方案不感兴趣,我只是想知道如何欺骗 execute_from_command_line 函数,使其认为它像普通脚本一样运行,因此它将启动 django 应用程序对我来说。

或者,如果有其他机制可以启动 django 应用程序,我会对此感兴趣。像这样的东西:

from django.core.management import start_app

然后我可以调用:

start_app()

或者类似的魔法就太棒了。

最佳答案

@Richard,这是为了弄清楚如何在另一个python脚本中调用django项目。我不确定它是否符合您的要求!但是如果您需要知道如何从其他 python 脚本文件访问 django 应用程序。然后你就可以检查一下。

import os 

# change the current directory
# to specified directory
os.chdir(r"Drivename:\Main Folder\Subfolder\django project folder")
#Need to show the opath for your django project folder
cwd = os.getcwd()

# print the current directory
print("Current working directory is:", cwd)
import django
from django.conf import settings

print(DATABASES)

它用于显示数据库,但如果您想了解其他信息,可以从列表中的其他配置选项中了解。

关于python - 如何从另一个 python 脚本启动 Django 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com