我制作了一个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)