Добавлена функция проверки почты (пока не закончено)

This commit is contained in:
mrmur 2022-04-02 21:01:56 +05:00
parent defba73ed6
commit 6e8fc6eb43
8 changed files with 214 additions and 4 deletions

View File

@ -19,3 +19,5 @@ class User(SqlAlchemyBase):
password = sqlalchemy.Column(sqlalchemy.String, nullable=True)
data_reg = sqlalchemy.Column(sqlalchemy.Date,
default=date.today())
role = sqlalchemy.Column(sqlalchemy.String, nullable=True)
activity = sqlalchemy.Column(sqlalchemy.Date, nullable=True)

Binary file not shown.

21
forms/register.py Normal file
View File

@ -0,0 +1,21 @@
from flask_wtf import FlaskForm
from wtforms import EmailField, StringField, PasswordField, SubmitField, FileField, IntegerField
from wtforms.validators import DataRequired
class RegisterForm(FlaskForm):
email = EmailField('Почта', validators=[DataRequired()])
name = StringField('Имя', validators=[DataRequired()])
surname = StringField('Фамилия', validators=[DataRequired()])
login = StringField('Логин', validators=[DataRequired()])
age = IntegerField('Age', validators=[DataRequired()])
about = StringField('Расскажите о себе', default='')
photo = FileField('Фото')
password = PasswordField('Пароль', validators=[DataRequired()])
password2 = PasswordField('Повторите пароль', validators=[DataRequired()])
submit = SubmitField('Регистрация')
class Confirmation(FlaskForm):
code_key = StringField('Код подтверждения', validators=[DataRequired()])
submit = SubmitField('Подтвердить')

67
main.py
View File

@ -1,9 +1,29 @@
from random import randint
from PIL import Image
from flask import Flask, render_template
from werkzeug.utils import redirect
from data import db_session
from data.users import User
from forms.register import RegisterForm, Confirmation
from post import mail
app = Flask(__name__)
app.config['SECRET_KEY'] = 'moona_secret_key'
help_arg = None
def save_photo(photo, login):
size = (250, 250)
im = Image.open(photo)
im.thumbnail(size)
im.save(f'static/img/user_photo/{login}.png')
return f'static/img/user_photo/{login}.png'
def secret_key():
return ''.join([str(randint(0, 9)) for i in range(5)])
@app.route('/')
@ -11,6 +31,53 @@ def main_page():
return render_template('base.html', title='moona')
@app.route('/confirmation', methods=['GET', 'POST'])
def confirmation():
global help_arg
form = help_arg
session = db_session.create_session()
conf = Confirmation()
secret_code = secret_key()
mail(f'Ваш секретный код: {secret_code}', form.email.data, 'Moona Код')
if conf.validate_on_submit():
if str(conf.code_key.data).strip() == str(secret_code).strip():
user = User(
name=form.name.data,
surname=form.surname.data,
login=form.login.data,
age=form.age.data,
about=form.about.data,
photo=save_photo(form.photo.data, form.login.data)
)
user.set_password(form.password.data)
session.add(user)
session.commit()
return redirect('/login')
else:
return render_template('confirmation_reg.html', title='Подтверждение', form=form,
message='Коды не совпадают')
return render_template('confirmation_reg.html', title='Подтверждение', form=conf)
@app.route('/register', methods=['GET', 'POST'])
def register():
global help_arg
form = RegisterForm()
if form.validate_on_submit():
if form.password.data != form.password2.data:
return render_template('register.html', title='Регистрация',
form=form,
message="Пароли не совпадают")
session = db_session.create_session()
if session.query(User).filter(User.login == form.login.data).first():
return render_template('register.html', title='Регистрация',
form=form,
message="Такой пользователь уже есть")
help_arg = form
return redirect('/confirmation')
return render_template('register.html', title='Регистрация', form=form)
def main():
db_session.global_init("db/moona_data.db")
app.run()

11
post.py
View File

@ -1,12 +1,15 @@
import smtplib
from email.message import EmailMessage
def mail(msg, to, topic='No temes'):
email_server = "smtp.yandex.ru"
sender = "moonadiary@yandex.ru"
headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender, to, topic)
text = msg
message = headers + text
em = EmailMessage()
em.set_content(msg)
em['To'] = to
em['From'] = sender
em['Subject'] = topic
mailServer = smtplib.SMTP(email_server)
mailServer.set_debuglevel(1)
mailServer.ehlo()
@ -14,5 +17,5 @@ def mail(msg, to, topic='No temes'):
mailServer.ehlo()
mailServer.login('moonadiary', 'fiX-2Vb-6a2-kCi')
mailServer.ehlo()
mailServer.sendmail(sender, to, message)
mailServer.send_message(em)
mailServer.quit()

View File

@ -0,0 +1,23 @@
<meta charset="UTF-8">
{% extends "base.html" %}
{% block content %}
<h1 class="title">Register Form</h1>
<div class="divlog">
<form action="" method="post">
{{ form.hidden_tag() }}
{{ form.csrf_token }}
<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>
{{message}}
</form>
</div>
{% endblock %}

94
templates/register.html Normal file
View File

@ -0,0 +1,94 @@
<meta charset="UTF-8">
{% extends "base.html" %}
{% block content %}
<h1 class="title">Register Form</h1>
<div class="divlog">
<form action="" method="post">
{{ form.hidden_tag() }}
{{ form.csrf_token }}
<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.name.label }}<br>
{{ form.name(class="form-control", type="password") }}<br>
{% for error in form.name.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.surname.label }}<br>
{{ form.surname(class="form-control", type="password") }}<br>
{% for error in form.surname.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.login.label }}<br>
{{ form.login(class="form-control") }}<br>
{% for error in form.login.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.age.label }}<br>
{{ form.age(class="form-control") }}<br>
{% for error in form.age.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.about.label }}<br>
{{ form.about(class="form-control") }}<br>
{% for error in form.about.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.photo.label }}<br>
{{ form.photo(class="form-control") }}<br>
{% for error in form.photo.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<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>
{{message}}
</form>
</div>
{% endblock %}