Добавлена возможность смены пароля

This commit is contained in:
Dinosaur 2022-04-06 17:27:39 +05:00
parent e224c9d5f5
commit fa23dc9590
4 changed files with 131 additions and 1 deletions

Binary file not shown.

20
forms/recovery.py Normal file
View File

@ -0,0 +1,20 @@
from flask_wtf import FlaskForm
from flask_wtf.file import FileAllowed
from wtforms import EmailField, StringField, PasswordField, SubmitField, FileField, IntegerField, TextAreaField
from wtforms.validators import DataRequired
class RecoveryForm(FlaskForm):
email = EmailField('Почта', validators=[DataRequired()])
submit = SubmitField('Восстановить')
class Conf(FlaskForm):
code_key = StringField('Код подтверждения', validators=[DataRequired()])
submit = SubmitField('Подтвердить')
class Finish(FlaskForm):
password = PasswordField('Пароль', validators=[DataRequired()])
password2 = PasswordField('Повторите пароль', validators=[DataRequired()])
submit = SubmitField('Восстановление')

49
main.py
View File

@ -8,16 +8,18 @@ from data import db_session
from data.users import User from data.users import User
from forms.login import LoginForm from forms.login import LoginForm
from forms.register import RegisterForm, Confirmation from forms.register import RegisterForm, Confirmation
from forms.recovery import RecoveryForm, Conf, Finish
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 = LoginManager()
login_manager.init_app(app) login_manager.init_app(app)
help_arg = None help_arg = False
send_msg = False send_msg = False
secret_code = None secret_code = None
photo = None photo = None
user_email = ""
def save_photo(photo, login): def save_photo(photo, login):
@ -78,6 +80,7 @@ def confirmation():
send_msg = True send_msg = True
if conf.validate_on_submit(): if conf.validate_on_submit():
if str(conf.code_key.data).strip() == str(secret_code).strip(): if str(conf.code_key.data).strip() == str(secret_code).strip():
print(secret_code)
if form.photo.data: if form.photo.data:
user = User( user = User(
name=form.name.data, name=form.name.data,
@ -132,6 +135,50 @@ def register():
return render_template('register.html', title='Регистрация', form=form, message='') return render_template('register.html', title='Регистрация', form=form, message='')
@app.route('/recovery', methods=['GET', 'POST'])
def recovery():
global send_msg
global secret_code
global help_arg
global user_email
form = RecoveryForm()
conf = Conf()
finish = Finish()
session = db_session.create_session()
if form.validate_on_submit() and form.email.data:
user_email = form.email.data
if not send_msg:
secret_code = secret_key()
mail(f'Ваш секретный код: {secret_code}', form.email.data, 'Moona Код')
send_msg = True
print(secret_code)
return render_template('recovery.html', title='Восстановление пароля', form=conf, message='', s='2')
if conf.validate_on_submit():
if str(conf.code_key.data).strip() == str(secret_code).strip():
help_arg = True
return render_template('recovery.html', title='Восстановление пароля', form=finish, message='', s='3')
if help_arg:
if finish.validate_on_submit():
db_sess = db_session.create_session()
user = db_sess.query(User).filter(User.email == user_email).first()
# user2 = User(
# name=user.name,
# surname=user.surname,
# login=user.login,
# age=user.age,
# about=user.about,
# email=user_email,
# photo=user.photo,
# role='user')
user.set_password(finish.password.data)
user2 = session.merge(user)
session.add(user2)
session.commit()
send_msg = False
return redirect('/login')
return render_template('recovery.html', title='Восстановление пароля', form=form, message='', s='1')
def main(): def main():
db_session.global_init("db/moona_data.db") db_session.global_init("db/moona_data.db")
app.run() app.run()

63
templates/recovery.html Normal file
View File

@ -0,0 +1,63 @@
<meta charset="UTF-8">
<link rel="stylesheet" href="../static/css/register.css">
{% extends "base.html" %}
{% block content %}
<div class="divlog">
<h1 class="title">Восстановление пароля</h1>
<form action="" method="post">
{{ form.hidden_tag() }}
{{ form.csrf_token }}
{% if s == '1' %}
<h3>Для восстановления пароля введите свою почту</h3>
<p>
{{ form.email.label }}<br>
{{ form.email(class="form-control") }}<br>
{% for error in form.email.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>{{ form.submit(type="submit", class="btn btn-primary") }}</p>
{% endif %}
{% if s == '2' %}
<h3>Введите код</h3>
<p>
{{ form.code_key.label }}<br>
{{ form.code_key(class="form-control") }}<br>
{% for error in form.code_key.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>{{ form.submit(type="submit", class="btn btn-primary") }}</p>
{% endif %}
{% if s == '3' %}
<h3>Введите новый пароль и подтвердите его</h3>
<p>
{{ form.password.label }}<br>
{{ form.password(class="form-control") }}<br>
{% for error in form.password.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.password2.label }}<br>
{{ form.password2(class="form-control") }}<br>
{% for error in form.password2.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>{{ form.submit(type="submit", class="btn btn-primary") }}</p>
{% endif %}
{% if message != '' %}
<div class="alert alert-danger" role="alert">{{ message }}</div>
{% endif %}
</form>
</div>
{% endblock %}