From 3f0d79b7d9ad1390714f0131409071564c0a8792 Mon Sep 17 00:00:00 2001 From: mrmur Date: Sun, 3 Apr 2022 21:36:47 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=20=D0=B2=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/users.py | 5 +++-- db/moona_data.db | Bin 12288 -> 12288 bytes forms/login.py | 11 +++++++++++ main.py | 26 +++++++++++++++++++++++++- static/css/register.css | 3 +++ templates/base.html | 4 ++-- templates/login.html | 38 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 forms/login.py create mode 100644 templates/login.html 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 2d927f7616cdb55fdf917880864526e2e17f4009..37a76001011e3ea882106ef26931e0c8019f4367 100644 GIT binary patch delta 178 zcmZojXh@hK&B!-V#+i|CW5P;)MwiWk3gY~e73GzA7#JA#FsN!uGn(@#LighIm+7^hGgH**5M@8;k9 zdsk5(y}6>k{gK~N z$7Qe&BbZeQ2SR5+&A-VZvEB8`U2ZPh>=<3#2@`-R0}`+>AQrbwj06aTD2-?&K~jVf c7J@s{k%(Ck5Yn)SBd}mL*dY!-U%lD-0qChVsQ>@~ 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 @@