Использование Python, Flask и SQLAlchemy для создания веб-сайта с возможностью регистрации, входа в систему, выхода из системы. Регистрация работает хорошо, и я могу создать нового пользователя, но вход в систему не выполняет действия после заполнения формы. Хуже всего то, что в моем терминале нет ошибок.
Я предполагаю, что это как-то связано с flask_login. Но не могу найти причину. Не могли бы вы посоветовать? Вот мой код:
__ init __
import flask
import os
import flask_sqlalchemy
import flask_migrate
import flask_login
app = flask.Flask(__name__)
app.config['SECRET_KEY'] = 'LSDJGLJDFGLSJGKLJSGKLJG'
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir, 'app.db')
db = flask_sqlalchemy.SQLAlchemy(app)
migrate = flask_migrate.Migrate(app, db)
login_mgr = flask_login.LoginManager(app)
from app import routes, models
forms.py
import wtforms
import flask_wtf
from wtforms.validators import data_required
class Signup(flask_wtf.FlaskForm):
name = wtforms.StringField('Name:', validators=[data_required()])
email = wtforms.StringField('E-mail:', validators=[data_required()])
pwd = wtforms.PasswordField('Password:', validators=[data_required()])
submit = wtforms.SubmitField('Sign Up')
class Signin(flask_wtf.FlaskForm):
email = wtforms.StringField("E-mail:")
pwd = wtforms.PasswordField("Password:")
remember = wtforms.BooleanField("Remember me")
submit = wtforms.SubmitField('Sign In')
моделей. py
from app import db, login_mgr
import flask_login
@login_mgr.user_loader
def load_user(userid):
userid = int(userid)
return User.query.get(userid)
class User(flask_login.UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
password = db.Column(db.String(64))
email = db.Column(db.String(64))
def get_id(self):
return self.id
rout.py
import flask
import flask_login
from app import app, forms
from app import db, models
@app.route('/')
def homepage():
return flask.render_template('index.jin')
@app.route('/contacts')
def contacts():
pass
@app.route('/signup', methods=("GET", "POST"))
def signup():
# Creating a form
signup_form = forms.Signup()
if flask.request.method == "POST":
if signup_form.validate_on_submit():
name = signup_form.name.data
password = signup_form.pwd.data
email = signup_form.email.data
new_user = models.User(name=name, password=password, email=email)
db.session.add(new_user)
db.session.commit()
return flask.redirect(flask.url_for('homepage'))
return flask.render_template('signup.jin', form=signup_form)
@app.route('/signin', methods=('GET', 'POST'))
def signin():
signin_form = forms.Signin()
if flask.request.method == "POST":
if signin_form.validate_on_submit():
email = signin_form.email.data
password = signin_form.pwd.data
remember = signin_form.remember.data
userlist = list(models.User.query.filter_by(email=email).all())
for user in userlist:
if user.email == email and user.password == password:
user_logged = user
if user_logged:
flask_login.login_user(user_logged, remember=remember)
flask.flash("You successfully Signed in!")
return flask.redirect(flask.url_for('homepage'))
else:
flask.flash("Invalid username or password")
return flask.render_template("signin.jin", form = signin_form)
return flask.render_template('signin.jin', form = signin_form)
и signin.jin для формы входа
{% extends 'base.jin' %}
{% block main %}
<form action="" method="POST">
<p>
{{ form.email.label }}
{{ form.email() }}
</p>
<p>
{{ form.pwd.label }}
{{ form.pwd() }}
</p>
<p>
{{ form.submit() }}
</p>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</form>
{% endblock %}
Буду очень признателен за ваш совет! Спасибо!