flask钩子函数应用 java钩子函数和回调函数( 二 )
// app.py
from flask import Flask, abort, request
from signals import login_signal # 导入信号对象
app = Flask(__name__)
@app.route('/login')
def login():
username = request.args.get('username', None)
if username:
login_signal.send(app,username=username) # 当客户登录了之后发送信号
return '登录成功'
return '请输入客户名'
if __name__ == '__main__':
app.run(debug=True, port=80)
// signals.py
from blinker import Namespace
# 定义一个信号
namespace = Namespace() # 生成一个命名空间的对象
login_signal = namespace.signal('login') # 通过namespace来创建一个login的信号通道
# 定义一个当接接到信号之后的处理函数
def login(sender, username):
'''
:param sender: 信号的发送者
:param username: 接收参数
'''
print('%s登录了 。是由%s发送的' % (username, sender)) # cce登录了 。是由<Flask 'app'>发送的
【flask钩子函数应用 java钩子函数和回调函数】# 监听信号
login_signal.connect(login)
Flask内置信号
Flask内置了9种信号 。并且 。每次触发了相应信号的事件 。都会自动发起信号 。所以咱们只要定义信号 。和监听信号即可;
内置信号
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在其中添加数据时 。自动触发;
template_rendered
模板渲染后执行;
from flask import Flask, render_template, template_rendered # 导入Flask内置信号
app = Flask(__name__)
def template_rendered_func(sender,*args,**kwargs): # 定义信号处理函数
print(sender)
print(args)
print(kwargs)
template_rendered.connect(template_rendered_func) # 监听信号,查看源码 Flask发送的信号是template_rendered.send(app, template=template, context=context)
@app.route('/login')
def home():
return render_template('home.html')
if __name__ == '__main__':
app.run(debug=True, port=80)
got_request_exception
请求执行出现错误异常时,将异常信息记录在案;
from flask import Flask, render_template, got_request_exception # 导入Flask内置信号
app = Flask(__name__)
def got_request_exception_func(sender,*args,**kwargs): # 定义信号处理函数
print(sender)
print(args)
print(kwargs)
got_request_exception.connect(got_request_exception_func) # 监听信号,此时得到结果{'exception': NameError("name 'request' is not defined",)}
@app.route('/login')
def home():
print(request.cce) # 此处会抛出错误
return render_template('home.html')
if __name__ == '__main__':
app.run(debug=True, port=80)
- 康熙通宝“鱼钩东”的收藏价值如何?顺治通宝中有这个版别吗?
- 台钓中铅坠与鱼钩的距离多远合适 台钓铅坠和鱼钩的距离多少
- 黄奇帆今天重磅发言!谈“脱钩断链”和“孔雀东南飞”
- 如何钓虾? 钓虾小妙招
- 横折 \"四\"字第二笔到底怎么写,是“乛”还是“(横折钩)”?
- 钩藤泡水有什么功效 钩藤泡水的正确方法
- 鱼漂怎么动才知道上鱼 鱼漂怎样动算是鱼上钩
- 上海河道的鱼为什么不好钓,不咬钩?
- 水库钓鱼怎样选鱼钩
- 钓鱼怎样选钩颜色
