我们来解决上一文章说到的,为登录不能点击发布问答功能
(一)先写一个装饰器
装饰器教程参考廖雪峰教程 http://t.cn/RK0SaGl
from functools import wraps
#登录限制装饰器
def login_required(func):
@wraps(func)
def wrapper(*args,**kwargs):
if session.get('user_id'):
return func(*args,**kwargs)
else:
return redirect(url_for('login'))
return wrapper
(二).然后在发布问答函数修改,仔细看,只是添加了@login_required
@app.route('/question')
@login_required
def question():
if request.method == 'GET':
return render_template('question.html')
else:
pass
现在的函数相当于
question = login_required(question) = wrapper
(1)如果现在打印print(run.__name__)
会发现此时结果变成了wrapper,但这是一种危险的情况,为了解决这种问题,我们导入
from functools import wraps
(2)还有一点def wrapper(*args,**kwargs):
可以传入的参数不固定,也就是说当其他函数使用这个装饰器的时候,传入的参数没有了限制,你不用担心因为参数问题而导致程序出错.
这样就实现了限制登录,当检测到没有user_id时,那么点击发布,就不能跳转