Сделана страница входа

This commit is contained in:
mrmur 2022-04-03 21:36:47 +05:00
parent d1a6c3d2d8
commit 3f0d79b7d9
7 changed files with 82 additions and 5 deletions

View File

@ -1,11 +1,12 @@
from datetime import date from datetime import date
import sqlalchemy import sqlalchemy
from flask_login import UserMixin
from werkzeug.security import check_password_hash, generate_password_hash from werkzeug.security import check_password_hash, generate_password_hash
from .db_session import SqlAlchemyBase from .db_session import SqlAlchemyBase
class User(SqlAlchemyBase): class User(SqlAlchemyBase, UserMixin):
__tablename__ = 'users' __tablename__ = 'users'
id = sqlalchemy.Column(sqlalchemy.Integer, id = sqlalchemy.Column(sqlalchemy.Integer,
@ -25,7 +26,7 @@ class User(SqlAlchemyBase):
activity = sqlalchemy.Column(sqlalchemy.Date, nullable=True) activity = sqlalchemy.Column(sqlalchemy.Date, nullable=True)
def check_password(self, password): 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): def set_password(self, password):
self.password = generate_password_hash(password) self.password = generate_password_hash(password)

Binary file not shown.

11
forms/login.py Normal file
View File

@ -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('Войти')

26
main.py
View File

@ -1,16 +1,19 @@
from random import randint from random import randint
from flask import Flask, render_template from flask import Flask, render_template
from flask_login import LoginManager, login_user
from werkzeug.utils import redirect from werkzeug.utils import redirect
from PIL import Image
from data import db_session from data import db_session
from data.users import User from data.users import User
from forms.login import LoginForm
from forms.register import RegisterForm, Confirmation from forms.register import RegisterForm, Confirmation
from post import mail from post import mail
app = Flask(__name__) app = Flask(__name__)
app.config['SECRET_KEY'] = 'moona_secret_key' app.config['SECRET_KEY'] = 'moona_secret_key'
login_manager = LoginManager()
login_manager.init_app(app)
help_arg = None help_arg = None
send_msg = False send_msg = False
secret_code = None secret_code = None
@ -27,11 +30,32 @@ def secret_key():
return ''.join([str(randint(0, 9)) for i in range(5)]) 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('/') @app.route('/')
def main_page(): def main_page():
return render_template('base.html', title='moona') 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']) @app.route('/confirmation', methods=['GET', 'POST'])
def confirmation(): def confirmation():
global help_arg global help_arg

View File

@ -6,4 +6,7 @@
} }
.title { .title {
text-align: center; text-align: center;
}
#buttons {
margin-left: -4%;
} }

View File

@ -12,11 +12,11 @@
<body> <body>
<nav class="navbar navbar-light" style="background-color: #d4f1ff;"> <nav class="navbar navbar-light" style="background-color: #d4f1ff;">
<div class="container-fluid"> <div class="container-fluid">
<a class="navbar-brand" href="#"> <a class="navbar-brand" href="/">
<img src="static/img/MoonCcircl1.png" width="70" height="70"> <img src="static/img/MoonCcircl1.png" width="70" height="70">
</a> </a>
<ul class="navbar-nav"> <ul class="navbar-nav">
<a class="navbar-brand" href="#"> <a class="navbar-brand" href="/">
<h2 style="color:#56a3ff">Главная</h2> <h2 style="color:#56a3ff">Главная</h2>
</a> </a>
</ul> </ul>

38
templates/login.html Normal file
View File

@ -0,0 +1,38 @@
<link rel="stylesheet" href="../static/css/register.css">
{% extends "base.html" %}
{% block content %}
<div class="divlog">
<h1>Авторизация</h1>
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
{{ form.email.label }}<br>
{{ form.email(class="form-control", type="email") }}<br>
{% for error in form.email.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(class="form-control", type="password") }}<br>
{% for error in form.password.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>{{ form.remember_me }} {{ form.remember_me.label }}</p>
<div class="input-group mb-3" id="buttons">
<ul>{{ form.submit(type="submit", class="btn btn-primary") }}</ul>
<ul><a class="btn btn-primary" style="background-color:#38aaff" type="submit" href="/recovery"><strong>Забыли
пароль</strong></a></ul>
</div>
{% if message != '' %}
<div class="alert alert-danger" role="alert">{{ message }}</div>
{% endif %}
</form>
</div>
{% endblock %}