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)
例如:
from flask import Flask
app = Flask(__name__)
class DeConfig():
SECRET_KEY='ASDFsdsedfSAfSDGf9898'
app.config.from_object(DeConfig)
@app.route('/')
def index():
return app.config['SECRET_KEY']
if __name__ == '__main__':
app.run()
浏览器访问127.0.0.1:5000时看到的就是ASDFsdsedfSAfSDGf9898
优点
缺点
敏感信息暴露在代码中
应用场景
默认配置
文件配置
和模块类似,只不过这里加上了py:app.config.from_pyfile('path/to/setting.py')
from flask import Flask
app = Flask(__name__)
class DeConfig():
SECRET_KEY='ASDFsdsedfSAfSDGf9898'
app.config.from_object(DeConfig)
@app.route('/')
def index():
return app.config['SECRET_KEY']
app.config.from_pyfile('config/base_setting.py')
@app.route('/py')
def py_config():
return app.config['SQLALCHEMY_DATABASE_URI']
if __name__ == '__main__':
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对象封装在一起
from flask import Flask
def create_flask_app(config):
app = Flask(__name__)
app.config.from_object(config)
return app
class DeConfig():
SECRET_KEY='ASDaf90as'
app = create_flask_app(DeConfig)
@app.route('/')
def index():
return app.config['SECRET_KEY']
app.config.from_pyfile('config/base_setting.py')
@app.route('/py')
def py_config():
return app.config['SQLALCHEMY_DATABASE_URI']
if __name__ == '__main__':
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,例如
app1 = Flask(__name__)
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
接着添加两个环境变量
接着Script path中选择Module name
Module name设置为flask,Parameters设置为run,接着执行该程序就是使用flask run的方式执行了
方法二
环境变量配置相同,在Script path处留白,在Parameters框中输入-m flask run
对于下面的警告,忽略即可。