flask 重定向和缺点
装潢器:
- from flask import render_template
- @app.errorhandler(404)
- def page_not_found(error):
- return render_template('page_not_found.html'), 404
留意 render_template()调用之后的 404 。这告诉Flask,该页的缺点代码是404 ,即没有找到。默认为200,也就是一切正常。
flask CSRF防护机制
- @app.before_request
- def csrf_protect():
- if request.method == "POST":
- token = session.pop('_csrf_token', None)
- if not token or token != request.form.get('_csrf_token'):
- abort(403)
- def some_random_string():
- return hashlib.sha256(os.urandom(16).hexdigest())
- def generate_csrf_token():
- if '_csrf_token' not in session:
- session['_csrf_token'] = some_random_string()
- return session['_csrf_token']
在flask的全局变量琅绫擎注冊 膳绫擎那个生成随机token的函数
app.jinja_env.globals[‘csrf_token’] = generate_csrf_token
在网页的模板是这么惹人的
- <form method=post action="">
- <input name=_csrf_token type=hidden value=http://database.51cto.com/art/201710/"{{ csrf_token() }}">
flask高低文处理器
Flask 高低文处理器主动向模板的高低文中插入新变量。高低文处理器在模板衬着之前运行,并且可以在模板高低文中插入新值。高低文处理器是一个返回字典的函数,这个字典的键值最终将传入应用中所有模板的高低文:
flask中的session
- @app.context_processor
- def inject_user():
- return dict(user=g.user)
膳绫擎的高低文处理器使得模板可以应用一个名为user值为g.user的变量。不过这个例子不是很有意思,因为g在模板中本来就是可用的,但它说清楚明了高低文处理器是若何工作的。
变量不仅限于值,高低文处理器也可以使某个函数在模板中可用(因为Python许可传递函数):