Flask Custom装饰器未重定向到下一页

时间:2018-07-06 13:14:12

标签: python flask decorator

我制作了一个Flask应用程序,要访问注册页面,您已经登录了管理员帐户。管理员帐户详细信息存储在JSON文件中。我制作了自定义装饰器,该装饰器提示用户登录admin,然后他们才能添加新用户。 但是,登录到admin帐户后,用户无法访问注册页面,它只是陷入了登录admin帐户的循环中。 我花了几个小时来研究其他堆栈溢出问题,但找不到任何可以帮助解决我问题的东西。

这是utils.py中自定义装饰器的代码

from functools import wraps 
from flask import flash, redirect, url_for, render_template
from user.forms import LoginForm
from werkzeug.security import check_password_hash
from config import get_admin()

def check_admin(func):
@wraps(func)
def wrap(*args, **kwargs):
    flash('You must be the admin to access this page')
    username, password = get_admin()
    form = LoginForm()
    if form.validate_on_submit():
        if username == form.username.data:
            if check_password_hash(password, form.password.data):
                return redirect(url_for('user.signup'))
            else:
                flash('Invalid Password')
        return func(*args, **kwargs)
    return render_template('admin.html', form=form)

return wrap

这是我的注册/在user / view.py中添加新用户的代码

from models import User
from flask import flash, redirect, url_for, render_template
from werkzeug.security import check_password_hash
from project.config import get_admin
from project.utils import check_admin

@user_blueprint.route('/user/signup',methods=['GET' , 'POST'])
@check_admin
def signup():
    hash = random.getrandbits(128)
    form = SignUpForm()
    if form.validate_on_submit():
        user = User(username=form.username.data, password=generate_password_hash(form.password.data),
                user_type=form.user_type.data,
                api_token=form.api_token.data,
                user_creation_date=datetime.datetime.now())
    db.session.add(user)
    db.session.commit()
    return redirect(url_for('user.login'))
return render_template('signup.html', form=form, hash=hash)

0 个答案:

没有答案