Сделана страница входа
This commit is contained in:
parent
d1a6c3d2d8
commit
3f0d79b7d9
@ -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)
|
||||||
|
|||||||
BIN
db/moona_data.db
BIN
db/moona_data.db
Binary file not shown.
11
forms/login.py
Normal file
11
forms/login.py
Normal 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
26
main.py
@ -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
|
||||||
|
|||||||
@ -6,4 +6,7 @@
|
|||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
}
|
||||||
|
#buttons {
|
||||||
|
margin-left: -4%;
|
||||||
}
|
}
|
||||||
@ -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
38
templates/login.html
Normal 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 %}
|
||||||
Loading…
x
Reference in New Issue
Block a user