Невозможно войти в систему, используя Flask - PullRequest
0 голосов
/ 25 января 2020

Использование 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 %}

Буду очень признателен за ваш совет! Спасибо!

...