diff --git a/data/users.py b/data/users.py index d85bfa0..1b29620 100644 --- a/data/users.py +++ b/data/users.py @@ -1,11 +1,12 @@ from datetime import date import sqlalchemy +from flask_login import UserMixin from werkzeug.security import check_password_hash, generate_password_hash from .db_session import SqlAlchemyBase -class User(SqlAlchemyBase): +class User(SqlAlchemyBase, UserMixin): __tablename__ = 'users' id = sqlalchemy.Column(sqlalchemy.Integer, @@ -25,7 +26,7 @@ class User(SqlAlchemyBase): activity = sqlalchemy.Column(sqlalchemy.Date, nullable=True) def check_password(self, password): - return check_password_hash(self.hashed_password, password) + return check_password_hash(self.password, password) def set_password(self, password): self.password = generate_password_hash(password) diff --git a/db/moona_data.db b/db/moona_data.db index 2d927f7..37a7600 100644 Binary files a/db/moona_data.db and b/db/moona_data.db differ diff --git a/forms/login.py b/forms/login.py new file mode 100644 index 0000000..58305df --- /dev/null +++ b/forms/login.py @@ -0,0 +1,11 @@ +from flask_wtf import FlaskForm +from wtforms import EmailField, PasswordField, BooleanField, SubmitField +from wtforms.validators import DataRequired + + +class LoginForm(FlaskForm): + email = EmailField('Почта', validators=[DataRequired()]) + password = PasswordField('Пароль', validators=[DataRequired()]) + style = {"type": "checkbox", "class": "btn-check", "id": "btn-check", "autocomplete": "off"} + remember_me = BooleanField('Запомнить меня') + submit = SubmitField('Войти') \ No newline at end of file diff --git a/main.py b/main.py index 829f4c9..9364cd9 100644 --- a/main.py +++ b/main.py @@ -1,16 +1,19 @@ from random import randint from flask import Flask, render_template +from flask_login import LoginManager, login_user from werkzeug.utils import redirect -from PIL import Image from data import db_session from data.users import User +from forms.login import LoginForm from forms.register import RegisterForm, Confirmation from post import mail app = Flask(__name__) app.config['SECRET_KEY'] = 'moona_secret_key' +login_manager = LoginManager() +login_manager.init_app(app) help_arg = None send_msg = False secret_code = None @@ -27,11 +30,32 @@ def secret_key(): return ''.join([str(randint(0, 9)) for i in range(5)]) +@login_manager.user_loader +def load_user(user_id): + db_sess = db_session.create_session() + return db_sess.query(User).get(user_id) + + @app.route('/') def main_page(): return render_template('base.html', title='moona') +@app.route('/login', methods=['GET', 'POST']) +def login(): + form = LoginForm() + if form.validate_on_submit(): + db_sess = db_session.create_session() + user = db_sess.query(User).filter(User.email == form.email.data).first() + if user and user.check_password(form.password.data): + login_user(user, remember=form.remember_me.data) + return redirect("/") + return render_template('login.html', + message="Неправильный логин или пароль", + form=form) + return render_template('login.html', title='Авторизация', form=form, message='') + + @app.route('/confirmation', methods=['GET', 'POST']) def confirmation(): global help_arg diff --git a/static/css/register.css b/static/css/register.css index 9e8a169..4ba3980 100644 --- a/static/css/register.css +++ b/static/css/register.css @@ -6,4 +6,7 @@ } .title { text-align: center; +} +#buttons { +margin-left: -4%; } \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index d0f2185..0329686 100644 --- a/templates/base.html +++ b/templates/base.html @@ -12,11 +12,11 @@