Flask(一) 初体验及参数配置

322 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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有三种读取配置的方法

  1. 从类中读取
    1. app.config.from_object(配置类)
class DefaultConfig:
    SECRET_KEY = "123"
app = Flask(__name__, static_url_path='/s')

app.config.from_object(DefaultConfig)
  1. 从文件中读取
SECRET_KEY = "123"
app.config.from_pyfile('configFile.py')
  1. 从环境变量中读取
    1. 本质上还是从配置文件读取,只不过加了一个从环境变量中获取配置文件位置的步骤
app.config.from_envvar('FLASK_CONFIG_FILE', silent=True)

silent=True 表示如果该环境变量不存在,不会报错 默认值为False,即如果环境变量不存在会报错

pycharm中设置环境变量:

5.2 三种读取配置文件方式的比较

方式优点缺点
配置类可以继承默认配置,较为灵活敏感配置信息暴露
配置文件配置信息存储在独立文件中,不暴露敏感信息配置文件名需要固定在代码中,配置方式不灵活
环境变量1. 配置信息存储在独立文件中,不暴露敏感信息2. 通过环境变量指定配置文件,方式灵活需要指定环境变量

三种配置方式各有优缺点,正常情况下需要配合使用

  1. 将默认配置通过配置类的方式进行配置
  2. 将敏感信息通过环境变量+配置文件的方式进行配置,保证不暴露

注: 同一个配置项,多次读取,后读取的会覆盖前面的.

5.3 最佳实践

  1. 使用配置类+配置环境变量的方式进行flask的创建
  2. 构建工厂方法,封装配置信息的加载过程
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