17 flask之请求扩展
1 before_first_request
服务一启动,第一次请求会走,以后再也不走了
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask
app = Flask(__name__)
@app.before_first_request
def first():
print('我的第一次')
@app.route('/')
def index():
print('index')
return 'ok'
if __name__ == '__main__':
app.run()
2 teardown_request
无论如何都会走,即使出了异常
注意:app.debug = False才会走
案例1:app.debug = True
- 未出异常
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask
app = Flask(__name__)
app.debug = True
@app.teardown_request
def ter(e):
print(e)
print('无论如何都会走,即使出了异常')
@app.route('/')
def index():
print('index')
return 'ok'
if __name__ == '__main__':
app.run()
2. 出异常
案例2:app.debug = False
- 未出异常
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask
app = Flask(__name__)
app.debug = False
@app.teardown_request
def ter(e):
print(e)
print('无论如何都会走,即使出了异常')
@app.route('/')
def index():
print('index')
return 'ok'
if __name__ == '__main__':
app.run()
2.出异常
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask
app = Flask(__name__)
app.debug = False
@app.teardown_request
def ter(e):
print(e)
print('无论如何都会走,即使出了异常')
@app.route('/')
def index():
print('index')
a
return 'ok'
if __name__ == '__main__':
app.run()
3 errorhandler
- 路径不存在时404
- 服务器内部错误500
案例1:路径不存在时404
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask
app = Flask(__name__)
@app.errorhandler(404)
def error_404(arg):
print(arg)
return "你迷路了----》404"
@app.route('/')
def index():
print('index')
return 'ok'
if __name__ == '__main__':
app.run()
案例2:服务器内部错误500
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask
app = Flask(__name__)
@app.errorhandler(500)
def error_500(arg):
print(arg)
return "请稍后再试"
@app.route('/')
def index():
print('index')
a
return 'ok'
if __name__ == '__main__':
app.run()
4 标签:template_global
main.py
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask, render_template
app = Flask(__name__)
@app.template_global()
def dzg(a1, a2):
return a1 + a2
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{dzg(1,2)}}
</body>
</html>
5 过滤器:template_filter
main.py
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:53
# @Author : dzg
from flask import Flask, render_template
app = Flask(__name__)
@app.template_filter()
def dzg(a1, a2, a3):
return a1 + a2 + a3
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{1|dzg(2,3)}}
</body>
</html>
6 总结
1 重点掌握before_request和after_request,
2 注意有多个的情况,执行顺序
3 before_request请求拦截后(也就是有return值),response所有都执行