Flask实战2问答平台-登录限制(装饰器)

我们来解决上一文章说到的,为登录不能点击发布问答功能
(一)先写一个装饰器
装饰器教程参考廖雪峰教程 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时,那么点击发布,就不能跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值