diff --git a/data/users.py b/data/users.py index 6717d62..6f9873d 100644 --- a/data/users.py +++ b/data/users.py @@ -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) \ No newline at end of file diff --git a/db/moona_data.db b/db/moona_data.db index 0762bab..6272247 100644 Binary files a/db/moona_data.db and b/db/moona_data.db differ diff --git a/forms/register.py b/forms/register.py new file mode 100644 index 0000000..f6057c6 --- /dev/null +++ b/forms/register.py @@ -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('Подтвердить') diff --git a/forms/Заглушка.gitkeep b/forms/Заглушка.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/main.py b/main.py index 910c2a4..cbabcbc 100644 --- a/main.py +++ b/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() diff --git a/post.py b/post.py index 68ac058..6daa26b 100644 --- a/post.py +++ b/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() diff --git a/templates/confirmation_reg.html b/templates/confirmation_reg.html new file mode 100644 index 0000000..b630ec6 --- /dev/null +++ b/templates/confirmation_reg.html @@ -0,0 +1,23 @@ + +{% extends "base.html" %} +{% block content %} +

Register Form

+
+
+ {{ form.hidden_tag() }} + {{ form.csrf_token }} +

Мы отправили секретный код вам на почту

+

+ {{ form.code_key.label }}
+ {{ form.code_key(class="form-control") }}
+ {% for error in form.code_key.errors %} +

+ {% endfor %} +

+

{{ form.submit(type="submit", class="btn btn-primary") }}

+ {{message}} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/register.html b/templates/register.html new file mode 100644 index 0000000..b4bcac1 --- /dev/null +++ b/templates/register.html @@ -0,0 +1,94 @@ + +{% extends "base.html" %} +{% block content %} +

Register Form

+
+
+ {{ form.hidden_tag() }} + {{ form.csrf_token }} +

+ {{ form.email.label }}
+ {{ form.email(class="form-control") }}
+ {% for error in form.email.errors %} +

+ {% endfor %} +

+

+ {{ form.name.label }}
+ {{ form.name(class="form-control", type="password") }}
+ {% for error in form.name.errors %} +

+ {% endfor %} +

+

+ {{ form.surname.label }}
+ {{ form.surname(class="form-control", type="password") }}
+ {% for error in form.surname.errors %} +

+ {% endfor %} +

+

+ {{ form.login.label }}
+ {{ form.login(class="form-control") }}
+ {% for error in form.login.errors %} +

+ {% endfor %} +

+

+ {{ form.age.label }}
+ {{ form.age(class="form-control") }}
+ {% for error in form.age.errors %} +

+ {% endfor %} +

+

+ {{ form.about.label }}
+ {{ form.about(class="form-control") }}
+ {% for error in form.about.errors %} +

+ {% endfor %} +

+

+ {{ form.photo.label }}
+ {{ form.photo(class="form-control") }}
+ {% for error in form.photo.errors %} +

+ {% endfor %} +

+

+ {{ form.password.label }}
+ {{ form.password(class="form-control") }}
+ {% for error in form.password.errors %} +

+ {% endfor %} +

+

+ {{ form.password2.label }}
+ {{ form.password2(class="form-control") }}
+ {% for error in form.password2.errors %} +

+ {% endfor %} +

+

{{ form.submit(type="submit", class="btn btn-primary") }}

+ {{message}} +
+
+{% endblock %} \ No newline at end of file