运行Flask和Django应用程序之间的区别

Ser*_*hii -3 python django flask

我不明白为什么要运行Flask应用程序

(venv) $ export FLASK_APP=microblog.py
(venv) $ flask run
Run Code Online (Sandbox Code Playgroud)

但是如果我想运行Django应用程序,我只会

(venv) $ python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

没有export DJANGO_APP=microblog.py
为什么?为什么在第一种情况下我需要导出应用程序,但在第二种情况下我不需要?

Ala*_*air 8

首先,Django和Flask是不同的框架。没有理由为什么启动它们的命令应该相同。

您需要导出FLASK_APP 以告知flask运行哪个应用程序

这样做export FLASK_APP=microblog.py将环境变量FLASK_APP。然后,flask应用程序可以从环境中读取此变量,并使用它来运行该应用程序。

在Python中,您可以从访问环境变量os.environ,或使用os.getenv方法:

import os
flask_app = os.getenv('FLASK_APP')
Run Code Online (Sandbox Code Playgroud)

如果使用django-admin命令,则需要以DJANGO_SETTINGS_MODULE类似的方式导出:

$ export DJANGO_SETTINGS_MODULE=yourproject.settings
$ django-admin runserver
Run Code Online (Sandbox Code Playgroud)

但是,对于Django,通常使用runserverwith manage.py代替django-admin。该manage.py是具体到项目,并设置DJANGO_SETTINGS_MODULE环境变量,如果它没有被设置已经:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yourproject.settings")
Run Code Online (Sandbox Code Playgroud)

因此DJANGO_SETTINGS_MODULE,使用时无需导出manage.py