Добавлена возможность смены пароля
This commit is contained in:
parent
e224c9d5f5
commit
fa23dc9590
BIN
db/moona_data.db
BIN
db/moona_data.db
Binary file not shown.
20
forms/recovery.py
Normal file
20
forms/recovery.py
Normal 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
49
main.py
@ -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
63
templates/recovery.html
Normal 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 %}
|
||||||
Loading…
x
Reference in New Issue
Block a user