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里是最合适的. 下面我们就来实现吧. 参考文 ...
随机推荐
- 菜单制作:ul li横向排列
CSS菜单制作 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- SpringBoot 各层之间的关系
SpringBoot 各层之间的关系 SpringBoot 分为四层:controller层.service层.dao层.entity层. entity层:和 model 层一样,存放的是实体类,属 ...
- Spark On Yarn搭建及各运行模式说明
之前记录Yarn:Hadoop2.0之YARN组件,这次使用Docker搭建Spark On Yarn 一.各运行模式 1.单机模式 该模式被称为Local[N]模式,是用单机的多个线程来模拟Spa ...
- 老生常谈--Java值传递和引用传递
起因 前两天面试被问到了这个问题,虽然之前老早就了解过这个问题,但是并没有深入了解,所以面试的时候一下子慌了,菜是原罪,今天菜鸡来补补基础知识. 其实这个问题一直是被讨论的,常见的三种说法就是,1,J ...
- 数据库程序接口——JDBC——API解读第一篇——建立连接的核心对象
结构图 核心对象 Driver Java通过Driver接口表示驱动,每种类型的数据库通过实现Driver接口提供自己的Driver实现类. Driver由属性,操作,事件三部分组成. 属性 公共属性 ...
- 数据库程序接口——JDBC——功能第五篇——批量处理
综述 批量处理一般指批量插入,批量更新,删除通过可以指定where条件实现.批量插入的实现方式有三种类型.statement,preparedStatement,callableStatement. ...
- 排序:ORDER BY
1.按照字段值进行排序: 语法:order by 字段 升序|降序 (asc|desc) 默认情况下为“升序” asc.asc=ascending 升 desc=descending 降 2.允许多字 ...
- 优化mysql
数据库设计和表创建时就要考虑性能 sql的编写需要注意优化 分区 分表 分库 1.数据库设计和表创建时就要考虑性能 mysql数据库本身高度灵活,造成性能不足,严重依赖开发人员能力.也就是说开发人员能 ...
- C++:打开一个文件夹下一系列的文件
可以用MFC的CFileFind类: FILE *pFile=NULL; CFileFind cff; CString fstr="C:\\page\\*.*"//所以用文件和文件 ...
- C/C++编程规范
1.文件结构 C/C++程序通常分为两个文件,一个文件用于保存程序的声明,一个文件用于保存程序的实现. 1.1 版权和版本的声明 版权和版本的声明位于头文件和定义文件的开头,主要内容有:(1)版权信息 ...