持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
1. 简介
轻量web框架
WSGI基于Werkzeug(路由模块),模板引擎使用Jinja2
flask只提供核心,其他功能都依赖于扩展
文档地址: docs.jinkan.org/docs/flask/
2. 环境安装
2.1 创建虚拟环境并安装flask
# 创建一个名字是flask的虚拟环境 指定python版本为3.10.5
conda crate -n flask python=3.10.5
# 进入虚拟环境
conda activate flask
# 安装flask
pip install flask
# 查看安装后的包
pip list
3. Hello world
3.1 编写Hello world
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
3.2 运行
如果使用pycharm这种工具的话,直接运行就行
命令行也可以,就像运行一个py文件一样运行就行
4. Flask的初始化参数
看我们上面的demo中的
app = Flask(__name__)
这一行代码,就是初始化Flask,我们来看下Flask的初始化参数.
进入该类的init方法,查看参数
主要的几个参数:
- import_name: 指定工程目录,指定工程目录后,默认情况下会在工程目录下寻找static和templates两个目录,作为静态资源和模板文件的存放目录
- static_url_path: 指定静态资源的访问路径 默认为/static_folder(第三个参数) 即static
- static_folder: 指定静态资源的存放目录 默认为static
- template_folder: 指定模板文件的存放目录 默认为templates
5. Flask的程序配置参数
除了4中的Flask初始化参数,Flask还有一些程序公共参数,比如加密key等.
Flask提供了 app.config 属性来操作配置,这个属性是一个字典,可以使用字典的操作方式来操作
app.config['SECRET_KEY'] = '123'
app.config.get('SECRET_KEY')
5.1 app.config的设置方法
app.config有三种读取配置的方法
- 从类中读取
-
- app.config.from_object(配置类)
class DefaultConfig:
SECRET_KEY = "123"
app = Flask(__name__, static_url_path='/s')
app.config.from_object(DefaultConfig)
- 从文件中读取
SECRET_KEY = "123"
app.config.from_pyfile('configFile.py')
- 从环境变量中读取
-
- 本质上还是从配置文件读取,只不过加了一个从环境变量中获取配置文件位置的步骤
app.config.from_envvar('FLASK_CONFIG_FILE', silent=True)
silent=True 表示如果该环境变量不存在,不会报错 默认值为False,即如果环境变量不存在会报错
pycharm中设置环境变量:
5.2 三种读取配置文件方式的比较
| 方式 | 优点 | 缺点 |
|---|---|---|
| 配置类 | 可以继承默认配置,较为灵活 | 敏感配置信息暴露 |
| 配置文件 | 配置信息存储在独立文件中,不暴露敏感信息 | 配置文件名需要固定在代码中,配置方式不灵活 |
| 环境变量 | 1. 配置信息存储在独立文件中,不暴露敏感信息2. 通过环境变量指定配置文件,方式灵活 | 需要指定环境变量 |
三种配置方式各有优缺点,正常情况下需要配合使用
- 将默认配置通过配置类的方式进行配置
- 将敏感信息通过环境变量+配置文件的方式进行配置,保证不暴露
注: 同一个配置项,多次读取,后读取的会覆盖前面的.
5.3 最佳实践
- 使用配置类+配置环境变量的方式进行flask的创建
- 构建工厂方法,封装配置信息的加载过程
from flask import Flask
app = Flask(__name__, static_url_path='/s')
app.config.from_envvar('FLASK_CONFIG_FILE', silent=True)
class DefaultConfig:
SECRET_KEY = "DEFAULT"
class DevelopmentConfig(DefaultConfig):
SECRET_KEY = "DEVELOPMENT"
def create_flask_app(config):
"""
生成flask配置信息
:param config: 通过配置类的方式
:return: app对象
"""
app.config.from_object(config)
app.config.from_envvar("FLASK_PROJECT_CONFIG_FILE", silent=True)
return app
create_flask_app(DevelopmentConfig)
@app.route('/')
def hello_world():
print(app.config.get('SECRET_KEY'))
return 'Hello World!'
if __name__ == '__main__':
app.run()
6. Flask的运行方式
上面写的demo中flask的运行方式都是通过 app.run() 方式运行
通过app.run()方法启动flask调试服务器,并且app.run() 可以携带参数,指定flask服务器的IP 端口 调试模式
app.run(host='0.0.0.0', port=6001, debug=True)
但是在flask 1.0之后就不建议这样使用了,而是通过命令来运行flask
flask run <-h> <-p>
flask run后可以携带参数
默认flask run 的服务器host是127.0.0.1 port是5000