Flask - app.debug=True,python manage.py和export FLASK_DEBUG=True,flask run的不同。
TL;DR,可以直接看下面的总结
问题1:为什么app.config['DEBUG'] = True,然后flask run并没有开启debugger和reloading,而直接运行脚本(python manage.py)却可以生效?
# manage.py
from flask import Flask
app = Flask(__name__)
#
app.config['DEBUG'] = True
print(app.debug)
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run()
然后
export FLASK_APP=manage.py
flask run

可以看到, 在代码配置app.debug=True,然后在命令行输入flask run 并没有起效。
但是
python manage.py

debugger 和 reloading却可以生效。
参考
1. https://github.com/pallets/flask/issues/1641


2. https://github.com/pallets/flask/issues/1979

解决
- 可以由上面看出,命令行命令flask run 和 直接运行脚本python manage.py是分开的。export FLASK_DEBUG=True是对于服务器的(明确知道开启了服务器),而写在代码里的app.debug=True是对应app(并不知道有没有加载,代码有没有运行)。
- 在代码中写app.debug = True / app.config['DEBUG'] = True后,使用python manage.py才会生效。
- 要想在命令行中有debugger和reloading功能,要export FLASK_DEBUG = True。
注意
在Flask 1.0版本后,新增了FLASK_ENV:http://flask.pocoo.org/docs/1.0/config/#environment-and-debug-features
Setting FLASK_ENV to development will enable debug mode. flask run will use the interactive debugger and reloader by default in debug mode.
但是同样地,只适用于命令行,在代码里hardcode然后运行python manage.py是不生效的。
That is
from flask import Flask
app = Flask(__name__)
app.config['ENV']= 'development'
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run()
然后
python manage.py

环境变成了development,但是没有debugger和reloading。
如果想直接运行脚本python manage.py就有debugger和reloading,
from flask import Flask
app = Flask(__name__)
app.config['ENV']= 'development'
app.config['DEBUG'] = True
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run()

而
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run()
export FLASK_APP=manage.py
export FLASK_ENV='development'
flask run

却可以生效
问题2:app.config['ENV']= 'development'为啥直接运行脚本(python x.py)不带有debugger和reloading。
http://flask.pocoo.org/docs/1.0/api/#flask.Flask.env
This maps to the ENV config key. This is set by the FLASK_ENV environment variable and may not behave as expected if set in code.
总结
1. flask run 和 python manage.py 是分开的两个环境。(export FLASK_DEBUG=True,flask run是对于服务器的(因为设置的是服务器的环境变量),而写在代码里的app.debug=True,python manage.py是对应app的(并不知道有没有加载,代码有没有运行)。)在manage.py里面写,无论是app.debug = True还是app.env = 'development'后,使用flask run 后不会带有debugger和reloading功能。
if __name__ == '__main__':
app.run(port=9999)
这是对于python manage.py映射到9999端口,而flask run 不受影响,默认是5000端口。
2. 要想在命令行flask run 后有以上两个功能,最好是export FLASK_DEBUG = True。或者export FLASK_ENV=developement后将环境变成了development,同时带有debugger和reloading功能。
3. 要想在代码里配置,app.config['DEBUG']=True,app.config['ENV']='development',结合使用。然后python manage.py。如果只写前者,命令行显示的environment是production。
4. export 环境变量这种是建议的,写在文件里是不建议的。
Using the environment variables as described above is recommended. While it is possible to set ENV and DEBUG in your config or code, this is strongly discouraged. They can’t be read early by the flask command, and some systems or extensions may have already configured themselves based on a previous value.
5. http://flask.pocoo.org/docs/1.0/server/#in-code

6. 结合4和5, flask run是推荐的做法,python manage.py 是不推荐的做法
Flask - app.debug=True,python manage.py和export FLASK_DEBUG=True,flask run的不同。的更多相关文章
- python manage.py startapp app 时候报错No module named _sqlite3
python manage.py startapp app 报错如下: File "manage.py", line 10, in <module> execut ...
- Django学习(1)——python manage.py startapp app-name新建app报错问题
作为一个刚接触python的小白,开始学习Django注定前路漫漫,记录一下学习过程中的问题和解决方案. 感谢“自强学堂”的无私奉献,根据教程安装了Django 1.9.12后,尝试新建项目,此时使用 ...
- You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): shopadmin. Run 'python manage.py migrate' to apply them.
数据库迁移时报错, You have 1 unapplied migration(s). Your project may not work properly until you apply the ...
- django 运行python manage.py sqlall books 时报错 app has migration
出现这个问题的原因是版本之前的不兼容,我用的django版本是1.8.6 而 这条python manage.py sqlall books 是基于django1.0版本的. 在django1.8.6 ...
- django源码分析 python manage.py runserver
django是一个快速开发web应用的框架, 笔者也在django框架上开发不少web应用,闲来无事,就想探究一下django底层到底是如何实现的,本文记录了笔者对django源码的分析过程 I be ...
- django(python manage.py imgrate)同步数据库出错后的解决办法
问题 很多情况下,因为app的models.py的文件内容有误,但是通过python manage.py check检查不出来时,当执行python manage.py migra ...
- python manage.py syncdb Unknown command: 'syncdb'问题解决方法
在django1.9后的版本中,python manage.py syncdb命令修改为python manage.py migrate,执行正常. 选择sqlite可视化sqlitestudio-3 ...
- Django 中 python manage.py makemigrations 与 python manage.py migrate
执行 python manage.py makemigrations django根据settings.py里面的INSTALLED_APPS项设置找到对应app里的models.py,应用里面创建的 ...
- 为django的python manage.py加自定义命令
计划在开发软件的过程中, 每次可以自己加入测试数据,这样就可以每次作全新的测试了. 将这个初始化django modules数据命令,将在manage.py里是最合适的. 下面我们就来实现吧. 参考文 ...
随机推荐
- Python 分发包中添加额外文件【新手必学】
在制作一个 Python 分发包时经常需要把一些文件添加到包中.最常见的例子是你希望通过 pip install命令安装 Python 包时会在 /etc/ 等目录下自动添加默认配置文件,由此可以 ...
- 「题解」「CF1103B」Game with modulo
简易中文题目 猜一个数字 \(a\),而你可以向机器提问一对 \((x,y)\) ,如果 \(x\bmod a\ge y \bmod a\) 机器返回字符串 x,反之返回字符串 y . 询问不能超过 ...
- winform学习(7)Label控件、Button控件、TextBox控件
Label控件是System.Windows.Forms.Label 类提供的控件. 作用:主要用来提供其他控件的描述文字,例如:登录窗体上的用户名.密码(输入框前面的字) Button控件是Syst ...
- 每天进步一点点------ORCAD Capture CIS 快捷键
ORCAD Capture CIS 快捷键 I: 放大O: 缩小C: 以光标所指为新的窗口显示中心 W: 画线On/OffP: 快速放置元件R: 元件旋转90°H: 元件 ...
- 【游记】CSP-J2019谔谔记
结果果然不能把希望寄托在渺茫的玄学上,实力不够还是不要渴求什么奇迹了. ----2020.2.21记 Day -6 考场就在我市,所以东道主应该运气会好一点吧. Day -1 听说本来准备上的中学准备 ...
- 各技能DBC参数
推荐你 通过 引擎的帮助文件查找标准魔法DB 下面是 部分hero引擎的标准魔法DB 34,解毒术,2,26,16,0,0,0,0,0,2,42,50,44,100,46,200,40,, 35,老 ...
- spring 配置
在context中配置 如:在base-package指明一个包: <context:component-scan base-package="cn.edu.dao"/> ...
- SparkStreaming个人记录
一.SparkStreaming概述 SparkStreaming是一种构建在Spark基础上的实时计算框架,它扩展了Spark处理大规模流式数据的能力,以吞吐量高和容错能力强著称. SparkStr ...
- 通过scrapy,从模拟登录开始爬取知乎的问答数据
这篇文章将讲解如何爬取知乎上面的问答数据. 首先,我们需要知道,想要爬取知乎上面的数据,第一步肯定是登录,所以我们先介绍一下模拟登录: 先说一下我的思路: 1.首先我们需要控制登录的入口,重写star ...
- css动画 自动打字,让你的文字飞舞起来
自动打字的效果 非一般的炫酷 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...