Python flask框架学习记录
一篇很详细的Flask框架介绍:https://www.cnblogs.com/sss4/p/8097653.html
Flask框架
核心 Werkzerug
路由模块+Jinja2
模板引擎规则
轻量–>只提供核心
最新版本 1.0.2
框架的选择上:
- 自由、灵活、高度定制———>flask
- 快速实现业务、不考虑技术选型,越简单越好–>Django
工程的创建
1. 创建独立的工作环境
1 | mkvirtualenv flask -p python3 |
jupyter、pyenv、virtualenv、virtualenvwrapper简要区别
2. 创建文件并写入代码:
1 | # 导入Flask类 |
启动即可,在http://127.0.0.1:5000 web界面上即可显示TestOK
端口默认为5000
django的端口默认为8000
3. 初始化参数说明
1 | import_name |
- Flask程序所在的包(模块),传
__name__
就可以 - 其可以决定Flask在访问静态文件时查找的路径
1 | static_url_path |
- 静态文件访问路径,可以不传,默认为
/+static_folder
1 | static_folder |
- 静态文件存储的文件夹,可以不传,默认为
static
1 | template_folder |
- 模板文件存储的文件夹,可与不传,默认为
templates
1 | app=Flask(__name__,static_url_path='/s',static_folder='static_files') |
在路径/s下即可访问static_ywc
里的静态文件
eg:http://127.0.0.1/s/1.png 存放在static_files
目录下的1.png就可以访问到,该目录可以自定义
4. 应用程序配置参数
- app.config.from_object(配置对象)
- 继承–>优点 复用
- 敏感数据暴露 缺点
- app.config.from_pyfile(配置文件)
- 优点:独立文件 保护敏感数据
- 缺点:不能继承,文件路径固定,不灵活
- app.config.from_envvar(‘环境变量名’)
- 优点:独立文件,保护敏感数据,灵活
- 缺点:不方便,记得设置环境变量
从配置文件中读取配置信息会覆盖掉从配置对象中加载的同名参数
Django将所有的配置信息都放在了settings.py文件中,而Flask则不同
Flask将配置信息存放在了app.config
属性中,该属性可以按照字典类型进行操作
主要使用以下三种方式:
从配置对象中加载
app.config.from_object(配置对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# 导入Flask类
from flask import Flask
# 配置对象方式加载配置信息
class DefaultConfig(object):
"""
默认配置
"""
SECRET_KEY='scasdsdasasdasd'
# Flask类接收一个参数__name__
app=Flask(__name__)
# 设置
app.config.from_object(DefaultConfig)
# 装饰器作用是将路由映射到视图函数index
@app.route('/')
def index():
# 读取配置信息
print(app.config['SECRET_KEY'])
return 'TestOK'
# Flask应用程序实例的run方法启动Web服务器
if __name__=='__main__':
app.run()从配置文件中加载
app.config.from_pyfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# 导入Flask类
from flask import Flask
# 配置对象方式加载配置信息
# class DefaultConfig(object):
# """
# 默认配置
# """
# SECRET_KEY='scasdsdasasdasd'
# Flask类接收一个参数__name__
app=Flask(__name__)
# 设置
# app.config.from_object(DefaultConfig)
app.config.from_pyfile('setting.py')
# 装饰器作用是将路由映射到视图函数index
@app.route('/')
def index():
# 读取配置信息
print(app.config['SECRET_KEY'])
return 'TestOK'
# Flask应用程序实例的run方法启动Web服务器
if __name__=='__main__':
app.run()从环境变量中加载
app.config.from_envvar('环境变量名')
Flask从环境变量加载配置的本质是从通过环境变量找到配置文件,再读取配置文件的信息
环境变量的值为配置文件的绝对路径
先在终端中执行如下命令export PROJECT_SETTING='~/setting.py'
1
2
3
4
5
6
7
8app = Flask(__name__)
app.config.from_envvar('PROJECT_SETTING', silent=True)
@app.route("/")
def index():
print(app.config['SECRET_KEY'])
return "hello world"关于
silent
的说明:- 表示系统环境变量中没有设置相应值时是否抛出异常
- False 表示不安静的处理,没有值时报错通知,默认为False
- True 表示安静的处理,即时没有值也让Flask正常的运行下去
5.启动方式
代码启动
- app.run(host=’0.0.0.0’,port=8000)
终端启动
代码中不用使用app.run
1 | export FLASK_APP=helloword |
环境变量FLASK_APP指明flask的启动实例
flask run -h 0.0.0.0 -p 8000 绑定地址 端口
flask run –help 获取帮助
生产模式与开发模式的控制
通过FLASK_ENV
环境变量指明- export FLASK_ENV=production 运行在生产模式,未指明则默认认为此方式
- export FLAKS_ENV=development 运行在开发模式
在pycharm需要进行在Environment Variables中配置
路由与蓝图
路由
1.查询路由信息
命令行中:
flask routes
在程序中:
app.url_map
url_map属性包含Flask应用的所有路由映射信息
构造获取全部路由信息的接口:
1 | from flask import Flask |
2.指定请求方式
Flask中,定义的路由,默认请求方式有下列三种:
- GET
- OPTIONS(自带)
- HEAD(自带)
代码示例:
1 | @app.route("/",methods=["GET","POST"]) |
利用methods
限制请求方式
蓝图
在Flask中,使用蓝图Blueprint
来分模块组织管理
- 一个应用可以有多个Blueprint
- 在一个应用初始化时,就应该要注册需要使用的Blueprint
使用方式
1、创建一个蓝图对象
1 | user_bp=Blueprint('user',__name__) |
2、在这个蓝图对象上进行操作,注册路由、指定静态文件夹,注册模版过滤器
1 | @user_bp.route('/') |
装饰器
1、为什么要用装饰器?
在不改变原函数的基础上,对函数执行前后进行自定义操作
1 | def wapper(func): |
@functools.wraps(func)
获取原函数的信息
2、带参数的装饰器
1 | """ |
面向对象
1、谈谈对面向对象的认识
- 封装:
- 将同一类方法分为一类:方法封装到类中
- 将方法中共同的参数封装到对象中:把共同值封装到对象中