Добавлена функция проверки почты (пока не закончено)
This commit is contained in:
parent
defba73ed6
commit
6e8fc6eb43
@ -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)
|
||||
BIN
db/moona_data.db
BIN
db/moona_data.db
Binary file not shown.
21
forms/register.py
Normal file
21
forms/register.py
Normal 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
67
main.py
@ -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
11
post.py
@ -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()
|
||||
|
||||
23
templates/confirmation_reg.html
Normal file
23
templates/confirmation_reg.html
Normal 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
94
templates/register.html
Normal 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 %}
|
||||
Loading…
x
Reference in New Issue
Block a user