这是登录功能,没有错误,一切正常,但是在正确输入登录名和密码后,用户没有被重定向到所需的页面
# функция входа
@app.route('/sign_in', methods=('POST', 'GET'))
def sign_in():
login = request.form.get('email')
password = request.form.get('psw')
if login and password:
user = Users.query.filter_by(email=login).first()
if check_password_hash(user.psw, password):
login_user(user)
next_page = request.args.get('index')
return redirect(next_page)
else:
flash('Проверьте логин или пароль')
else:
flash('Пожалуйста авторизуйтесь')
return render_template("sign_in.html")
也许我弄乱了表单和数据库的名称,所以我附上了它们:
<form action="/sign_in" method="get" class="form">
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<h3>{{ message }}</h3>
{% endfor %}
{% endif %}
{% endwith %}
<div class="circle"></div>
<div class="register-form-container">
<h1 class="form-title">Войти</h1>
<div class="form-fields">
<p><label>Email: </label> <input type="text" name="email" value="" requied />
</div>
<div class="form-fields">
<p><label>Пароль: </label> <input type="password" name="psw" value="" requied />
</div>
<div class="form-fields">
<p><input type="submit" value="Войти" />
</div>
<div class="form-fields">
<a type="submit" href="/registration" >Регистрация</a>
</div>
</div>
</form>
D B:
class Users(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50), unique=True, nullable=False)
psw = db.Column(db.String(500), nullable=False)
date = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f"<users {self.id}>"
请帮忙,我什么都不懂!
什么都没有发生,因为检查的条件
email不起作用password。为什么会这样还有待观察。您正在使用 method 提交表单
GET,但在您的代码中您正在编写request.form。POST只有当请求方法是或 时,才会有一些东西进入这个属性PUT。否则,它是空的。并且
get使用字典中不存在的键 - 默认结果None。用request.args替换它可能会更好。