zoukankan      html  css  js  c++  java
  • Flask

    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

    解决

    1. 可以由上面看出,命令行命令flask run 和 直接运行脚本python manage.py是分开的。export FLASK_DEBUG=True是对于服务器的(明确知道开启了服务器),而写在代码里的app.debug=True是对应app(并不知道有没有加载,代码有没有运行)。
    2. 在代码中写app.debug = True / app.config['DEBUG'] = True后,使用python manage.py才会生效。
    3. 要想在命令行中有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 是不推荐的做法

  • 相关阅读:
    sp_executesql介绍和使用
    jQuery中的 return false, e.preventDefault(), e.stopPropagation()的区别
    clearfix:after 清除css浮动
    paip.mysql 性能跟iops的以及硬盘缓存的关系
    paip.mysql 性能测试 报告 home right
    paip.mysql 性能测试by mysqlslap
    paip.java 架构师之路以及java高级技术
    paip. 提升性能---hibernate的缓存使用 总结
    paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
    paip.解决access出现 -2147467259 无效的参数量
  • 原文地址:https://www.cnblogs.com/allen2333/p/9270334.html
Copyright © 2011-2022 走看看