1,什么是钩子函数?
就是运行别人前都得先运行他:
from flask import Flask app = Flask(__name__) @app.route(‘/‘) def hello_world(): return ‘Hello World!‘ @app.before_request def bf(): print("运行任何程序前都要先运行我,哈哈!") if __name__ == ‘__main__‘: app.run()
2,应用在哪?
比如在网站中检查是否为登陆状态,否则应跳转到登陆界面:
from flask import Flask,render_template,g,url_for,request,redirect,session import os app = Flask(__name__) app.config[‘SECRET_KEY‘] = os.urandom(24) @app.route(‘/‘) def hello_world(): # print("index") return ‘index!‘ @app.route(‘/login/‘ ,methods=[‘GET‘,‘POST‘]) def login(): # print("login") if request.method == "GET": return render_template(‘login.html‘) else: username = request.form.get(‘username‘) password = request.form.get(‘password‘) if username == "1" and password == "1": session[‘username‘] = "1" return ‘Success to login in!‘ else: return redirect(url_for(‘login‘)) @app.route(‘/edit/‘) def edit(): ##1和 #2都是一样的意思,但是1更方便,hasattr() 函数用于判断对象是否包含对应的属性。 if hasattr(g,‘username‘): #1 # if session.get(‘username‘) == "1": #2 return ‘success to edit‘ else: return redirect(url_for(‘login‘)) # before_request:在请求之前执行的,在视图函数执行之前执行的。 # before_request只是一个装饰器,他可把要设置为钩子函数的代码放到视图函数执行之前来执行。 @app.before_request def my_before_request(): print(‘hw‘) # 有username证明用户是登陆状态 if session.get(‘username‘): g.username = session.get(‘username‘) #g? # 相当于在每一个视图函数(如‘/’,/login/执行前都会执行这个函数。) if __name__ == ‘__main__‘: app.run()
原文:https://www.cnblogs.com/two-peanuts/p/10946625.html