flask中的中间键(钩子函数)
-
before_first_request
第一次请求才被调用(可用于缓存) -
before_request
请求之前被调用 -
after_request
请求之后被调用(前面出错就不会执行) -
teardown_request
无论报不报错都会执行
from flask import Flask
app = Flask(__name__)
# 钩子函数
@app.before_request
def before():
print('before request!')
@app.before_request
def before():
print('before request!2')
# 第一次调用时才会被执行
@app.before_first_request
def before():
print('before first!!!')
@app.route('/index/')
def index():
# 1/0 # 如果取消这里的注释after_request就不会执行了
return 'index'
# 程序在不出异常才会被调用
@app.after_request
def after(response):
print('after request')
return response
@app.after_request
def after(response):
print('after request2')
return response
@app.teardown_request
def teardown(exception):
print('teardown request')
if __name__ == '__main__':
app.run()
>>>>
# 第一次执行
before first!!!
before request!
before request!2
after request2
after request
teardown request
# 第二次执行
before request!
before request!2
after request2
after request
teardown request
使用pymysql连接数据库
import pymysql
from flask import Flask, request, g
app = Flask(__name__)
@app.before_request
def before():
# 连接数据库
conn = pymysql.connect(host='IP地址', port=端口 默认为3306, user='root', password='数据库密码', database='数据库名')
# 获取游标
cursor = conn.cursor()
# g对象
g.conn = conn
g.cursor = cursor
@app.route('/sel_stu/')
def sel_stu():
if request.method == 'GET':
# 查询所有学生信息
sql = 'select * from student'
g.cursor.execute(sql)
data = g.cursor.fetchall()
print(data)
return '查询成功'
@app.teardown_request
def teardown(exception):
# 关闭游标
g.conn.close()
if __name__ == '__main__':
app.run(debug=True)
网友评论