Flask()对象初始化参数

参数:

import_name

默认情况下是:app = Flask(name)

name是为了寻找整个工程目录的。接着flask会去static中寻找静态文件,templates寻找模板文件。
也是可以传入其他字符串的,如果是某个模块,则会找那个模块的目录作为工程目录。

static_url_path

静态文件访问路径,可以不传,默认为/+static_folder

app = Flask(name,static_url_path=’/s’)
此时访问127.0.0.0:5000/s/等同于不传参的127.0.0.0:5000/static

static_folder

静态 文件存储的文件夹,可以不传,默认为static

app = Flask(name,static_url_path=’/s’,static_folder=’static’)
此时访问127.0.0.0:5000/s/等同于不传参的127.0.0.0:5000/static

template_folder

模板文件存储的文件夹,可以不传,默认为templates

配置加载方式

变量配置

在代码中单独设置,例如
app.config['DEBUG']=True

模块配置/从配置对象加载app.config.from_object

单独创建一个配置文件py,里面写上对应的参数值,然后在启动文件中
app.config.from_object(xxxx)

例如:

  1. from flask import Flask
  2. app = Flask(__name__)
  3. class DeConfig():
  4. SECRET_KEY='ASDFsdsedfSAfSDGf9898'
  5. app.config.from_object(DeConfig)
  6. @app.route('/')
  7. def index():
  8. return app.config['SECRET_KEY']
  9. if __name__ == '__main__':
  10. app.run()

浏览器访问127.0.0.1:5000时看到的就是ASDFsdsedfSAfSDGf9898

优点

可继承

缺点

敏感信息暴露在代码中

应用场景

默认配置

文件配置

和模块类似,只不过这里加上了py:
app.config.from_pyfile('path/to/setting.py')

  1. from flask import Flask
  2. app = Flask(__name__)
  3. class DeConfig():
  4. SECRET_KEY='ASDFsdsedfSAfSDGf9898'
  5. app.config.from_object(DeConfig)
  6. @app.route('/')
  7. def index():
  8. return app.config['SECRET_KEY']
  9. app.config.from_pyfile('config/base_setting.py')
  10. @app.route('/py')
  11. def py_config():
  12. return app.config['SQLALCHEMY_DATABASE_URI']
  13. if __name__ == '__main__':
  14. app.run()

例如这里的config/base_setting.py中配置了SECRET_KEY行业上面的不一样,那么访问的时候就以py配置文件为准了。

优点

文件独立,相对安全【我觉得其实这里不绝对,对象也可以写在单独的文件里】

缺点

不同系统读取路径读取方式不同,文件路径固定,不灵活

环境变量配置app.config.from_envvar

先在系统中设置环境变量:
linux :export ops_config = path/to/setting.py
win:set ops_config = path/to/setting.py)

在Pycharm中,可以在environment variables中进行设置。

然后在flask启动文件设置:
app.config.from_envvar('ops_config')

例如这里把ops_config设置为上面的base_setting.py,结果和上面一致。

app.config.from_envvar 还有一个参数,silent,默认为false,可以设置为True,如果设置为True之后,假使环境变量不存在则不报错,不设置True的话,没有此环境变量则报错。

优点

独立文件,保护敏感数据,文件路径不固定,灵活

缺点

不方便,需要提前设置环境变量

一般情况下,在对象中设置默认的配置信息,在环境变量对应的py文件设置敏感数据。

构建工厂对象

可以使用工厂模式思想对app进行构建:
将默认配置信息和创建app对象封装在一起

  1. from flask import Flask
  2. def create_flask_app(config):
  3. app = Flask(__name__)
  4. app.config.from_object(config)
  5. return app
  6. class DeConfig():
  7. SECRET_KEY='ASDaf90as'
  8. app = create_flask_app(DeConfig)
  9. @app.route('/')
  10. def index():
  11. return app.config['SECRET_KEY']
  12. app.config.from_pyfile('config/base_setting.py')
  13. @app.route('/py')
  14. def py_config():
  15. return app.config['SQLALCHEMY_DATABASE_URI']
  16. if __name__ == '__main__':
  17. app.run()

Flask路由注册

@app.route

后面的地址就是path

还可以加参数,参数写在’’的<>中
@app.route(‘/path/‘)
例如这里需要获得username

app.add_url_rule

add_url_rule(path,view_func=)

方法同@app.route()

启动程序

app.run

在代码中写如下两行:
if name==’main‘:
app.run()

其中,app.run()中可以有参数host,port和debug,例如
app.run(host=’0.0.0.0’,port=8080,debug=True)

(新版)flask run

这个是新版的,flask也是推荐这种方式,命令行的方式。
本质上flask run等同于python -m flask run

无需app.run()

使用这个命令行工具就无需在代码中调用此方法了。

环境变量FLASK_APP

需要设置环境变量export FLASK_APP=xxx[.py]
.py可有可无,如果是.py就是py文件,如果无.py则是模块。
这里如果程序中注册了两个app,那么需要在FLASK_APP变量中指定app,例如

  1. app1 = Flask(__name__)
  2. app2 = Flask(__name__)

那么下需要设置环境变量export FLASK_APP = xx:app1或者export FLASK_APP = xx:app2

环境变量FLASK_ENV

production/development
通过设置这两个变量,可以控制debug模式是开还是关。

环境变量FLASK_DEBUG

设置为1的话则是开启DEBUG模式

可以通过flask run —help查看相关帮助命令参数
flask run —host 0.0.0.0则是指在任何ip都可以访问

在pycharm中启动

如果想实现使用flask run的方式运行程序,可以有以下几个步骤:

方法一

找到Environment variables
image.png

接着添加两个环境变量
image.png

接着Script path中选择Module name
image.png
Module name设置为flask,Parameters设置为run,接着执行该程序就是使用flask run的方式执行了
image.png

方法二

环境变量配置相同,在Script path处留白,在Parameters框中输入-m flask run
对于下面的警告,忽略即可。
image.png