Flask快速入门day 05(信号的使用,flask-script)
Flask框架
一、信号
1、简介
什么是信号:
Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为 ,flask 和django都有
观察者模式,又叫发布-订阅(Publish/Subscribe) 23 种设计模式之一
使用场景:
- 例如:
- 在数据库增加一条记录时,执行一些操作
- 执行到一些代码时自动触发,执行也写操作
2、信号的使用方法
模块安装:
-1、安装blinker模块
# 在flask中,信号是基于blinker这个模块的
pip install blinker
2、1.内置信号
- 1、使用flask导入signal
from flask import signals
- 2、选择需要使用的方法
# 这里使用的请求进入自动执行
from . import home_bp
from flask import signals
app = home_bp
# 请求进入就会执行
def func(*args, **kwargs):
print('我执行了')
return True
# 将需要执行的函数传入
signals.request_started.connect(func)
@app.route('/', endpoint='index')
def index():
return 'ok'
信号 | 用法简介 |
---|---|
request_started | 请求到来前执行 |
request_finished | 请求结束后执行 |
before_render_template | 模板渲染前执行 |
template_rendered | 模板渲染后执行 |
got_request_exception | 请求执行出现异常时执行 |
request_tearing_down | 请求执行完毕后自动执行(无论成功与否) |
appcontext_tearing_down | 应用上下文执行完毕后自动执行(无论成功与否) |
appcontext_pushed | 应用上下文push时执行 |
appcontext_popped | 应用上下文pop时执行 |
message_flashed | 调用flask在其中添加数据时,自动触发 |
request_started = _signals.signal('request-started') # 请求到来前执行
request_finished = _signals.signal('request-finished') # 请求结束后执行
before_render_template = _signals.signal('before-render-template') # 模板渲染前执行
template_rendered = _signals.signal('template-rendered') # 模板渲染后执行
got_request_exception = _signals.signal('got-request-exception') # 请求执行出现异常时执行
request_tearing_down = _signals.signal('request-tearing-down') # 请求执行完毕后自动执行(无论成功与否)
appcontext_tearing_down = _signals.signal('appcontext-tearing-down') # 应用上下文执行完毕后自动执行(无论成功与否)
appcontext_pushed = _signals.signal('appcontext-pushed') # 应用上下文push时执行
appcontext_popped = _signals.signal('appcontext-popped') # 应用上下文pop时执行
message_flashed = _signals.signal('message-flashed') # 调用flask在其中添加数据时,自动触发
2、2.自定义信号
- 1、内置信号的使用步骤
1)写一个函数
2)绑定内置信号
3)等待触发
- 2、具体用法
from . import home_bp
from flask import session, request
from flask.signals import _signals
app = home_bp
# 自定义信号(举例session设置值的时候自动触发)
session_set = _signals.signal('这里是别名')
def func(*args, **kwargs):
print(args) # (<Request 'http://127.0.0.1:5000/home/' [GET]>,)
print(kwargs) # {}
print('session设置值了') # 这里还可以执行很多操作
return True
# 传入绑定的函数
session_set.connect(func)
@app.route('/', endpoint='index')
def index():
session['name'] = 'kangkang'
# 在session设置值后手动触发(这里可以传入参数)
session_set.send(request)
return 'ok'
二、flask-script
1、简介
什么是flask-script:
可以通过命令来启动flask项目,例如django可以使用python manage.py runserver
2、命令启动项目
模块安装:
- 1、需求模块
Flask==2.2.2
Flask_Script==2.0.3
-2、代码实现
-安装:pip3.8 install flask-script
-修改代码:
from src import app
from flask_script import Manager
if __name__ == '__main__':
manage = Manager(app)
manage.run()
-用命令启动
python manage.py runserver
3、自定义命令
# 单自定制命令
@manager.command
def custom(arg):
# 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中
print(arg)
# 复杂一些的自定制命令
@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
# python run.py cmd -n lqz -u xxx
# python run.py cmd --name lqz --url uuu
print(name, url)