Начал делать изменение профиля
This commit is contained in:
parent
158409f158
commit
89bb80c73c
15
forms/edit_profile.py
Normal file
15
forms/edit_profile.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from flask_wtf import FlaskForm
|
||||||
|
from flask_wtf.file import FileAllowed
|
||||||
|
from wtforms import EmailField, StringField, TextAreaField, FileField, SubmitField, DateField
|
||||||
|
from wtforms.validators import DataRequired
|
||||||
|
|
||||||
|
|
||||||
|
class EditProfileForm(FlaskForm):
|
||||||
|
email = EmailField('Почта', validators=[DataRequired()])
|
||||||
|
name = StringField('Имя', validators=[DataRequired()])
|
||||||
|
surname = StringField('Фамилия', )
|
||||||
|
about = TextAreaField('Расскажите о себе', default='')
|
||||||
|
birthday = DateField('Дата рождения')
|
||||||
|
photo = FileField('Фото', validators=[FileAllowed(['jpg', 'png', 'bmp'], 'Только фотографии!')])
|
||||||
|
del_photo = SubmitField('Удалить фотографию')
|
||||||
|
submit = SubmitField('Сохранить')
|
||||||
@ -1,6 +1,6 @@
|
|||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from flask_wtf.file import FileAllowed
|
from flask_wtf.file import FileAllowed
|
||||||
from wtforms import EmailField, StringField, PasswordField, SubmitField, FileField, DateField, TextAreaField
|
from wtforms import EmailField, StringField, PasswordField, SubmitField
|
||||||
from wtforms.validators import DataRequired
|
from wtforms.validators import DataRequired
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
74
functions.py
74
functions.py
@ -1,37 +1,37 @@
|
|||||||
import smtplib
|
import smtplib
|
||||||
from email.message import EmailMessage
|
from email.message import EmailMessage
|
||||||
|
|
||||||
|
|
||||||
def check_password(password=''):
|
def check_password(password=''):
|
||||||
smb = 'qwertyuiopasdfghjklzxcvbnm'
|
smb = 'qwertyuiopasdfghjklzxcvbnm'
|
||||||
if len(password) < 6:
|
if len(password) < 6:
|
||||||
return 'Пароль должен быть длиннее 6 символов'
|
return 'Пароль должен быть длиннее 6 символов'
|
||||||
elif False in [True if i.isalpha() and i.lower() in smb or i.isdigit() else False for i in password]:
|
elif False in [True if i.isalpha() and i.lower() in smb or i.isdigit() else False for i in password]:
|
||||||
return 'Пароль может содержать только буквы латинского алфавита и цифры'
|
return 'Пароль может содержать только буквы латинского алфавита и цифры'
|
||||||
elif True not in [True if i.isdigit() else False for i in password]:
|
elif True not in [True if i.isdigit() else False for i in password]:
|
||||||
return 'Пароль должен содержать буквы разного регистра и цифры'
|
return 'Пароль должен содержать буквы разного регистра и цифры'
|
||||||
elif False not in [True if i.islower() and i.isalpha() else False for i in password]:
|
elif False not in [True if i.islower() and i.isalpha() else False for i in password]:
|
||||||
return 'Пароль должен содержать буквы разного регистра и цифры'
|
return 'Пароль должен содержать буквы разного регистра и цифры'
|
||||||
else:
|
else:
|
||||||
return 'OK'
|
return 'OK'
|
||||||
|
|
||||||
|
|
||||||
def mail(msg, to, topic='Подтверждение почты'):
|
def mail(msg, to, topic='Подтверждение почты'):
|
||||||
file = open('mail.incepted', 'r', encoding='utf-8').readline().split()
|
file = open('mail.incepted', 'r', encoding='utf-8').readline().split()
|
||||||
login, password = file[0], file[1]
|
login, password = file[0], file[1]
|
||||||
email_server = "smtp.yandex.ru"
|
email_server = "smtp.yandex.ru"
|
||||||
sender = "incepted@yandex.ru"
|
sender = "incepted@yandex.ru"
|
||||||
em = EmailMessage()
|
em = EmailMessage()
|
||||||
em.set_content(msg)
|
em.set_content(msg)
|
||||||
em['To'] = to
|
em['To'] = to
|
||||||
em['From'] = sender
|
em['From'] = sender
|
||||||
em['Subject'] = topic
|
em['Subject'] = topic
|
||||||
mailServer = smtplib.SMTP(email_server)
|
mailServer = smtplib.SMTP(email_server)
|
||||||
mailServer.set_debuglevel(1)
|
mailServer.set_debuglevel(1)
|
||||||
mailServer.ehlo()
|
mailServer.ehlo()
|
||||||
mailServer.starttls()
|
mailServer.starttls()
|
||||||
mailServer.ehlo()
|
mailServer.ehlo()
|
||||||
mailServer.login(login, password)
|
mailServer.login(login, password)
|
||||||
mailServer.ehlo()
|
mailServer.ehlo()
|
||||||
mailServer.send_message(em)
|
mailServer.send_message(em)
|
||||||
mailServer.quit()
|
mailServer.quit()
|
||||||
|
|||||||
328
main.py
328
main.py
@ -1,133 +1,195 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
import os
|
||||||
from flask import Flask, render_template, request, url_for
|
|
||||||
from flask_login import login_user, current_user, LoginManager, logout_user, login_required
|
from flask import Flask, render_template, request, url_for
|
||||||
from werkzeug.utils import redirect
|
from flask_login import login_user, current_user, LoginManager, logout_user, login_required
|
||||||
from itsdangerous import URLSafeTimedSerializer, SignatureExpired
|
from werkzeug.datastructures import CombinedMultiDict
|
||||||
|
from werkzeug.utils import redirect
|
||||||
from functions import check_password, mail
|
from itsdangerous import URLSafeTimedSerializer, SignatureExpired
|
||||||
from forms.login import LoginForm
|
|
||||||
from forms.register import RegisterForm
|
from functions import check_password, mail
|
||||||
from data.users import User
|
from forms.edit_profile import EditProfileForm
|
||||||
from waitress import serve
|
from forms.login import LoginForm
|
||||||
from data import db_session
|
from forms.register import RegisterForm
|
||||||
|
from data.users import User
|
||||||
app = Flask(__name__)
|
from waitress import serve
|
||||||
key = 'test_secret_key'
|
from data import db_session
|
||||||
app.config['SECRET_KEY'] = key
|
|
||||||
s = URLSafeTimedSerializer(key)
|
app = Flask(__name__)
|
||||||
login_manager = LoginManager()
|
key = 'test_secret_key'
|
||||||
login_manager.init_app(app)
|
app.config['SECRET_KEY'] = key
|
||||||
|
s = URLSafeTimedSerializer(key)
|
||||||
|
login_manager = LoginManager()
|
||||||
@app.route('/')
|
login_manager.init_app(app)
|
||||||
def base():
|
|
||||||
return render_template('main.html', title='Главная')
|
|
||||||
|
@app.route('/')
|
||||||
|
def base():
|
||||||
@login_manager.user_loader
|
if not current_user.is_authenticated:
|
||||||
def load_user(user_id):
|
return render_template('main.html', title='Главная')
|
||||||
db_sess = db_session.create_session()
|
else:
|
||||||
return db_sess.query(User).get(user_id)
|
return redirect('/project')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/login', methods=['GET', 'POST'])
|
@app.route('/project')
|
||||||
def login():
|
def project():
|
||||||
if not current_user.is_authenticated:
|
if current_user.is_authenticated:
|
||||||
message = request.args.get('message') if request.args.get('message') else ''
|
return redirect(f'/profile')
|
||||||
danger = request.args.get('danger') if request.args.get('danger') else False
|
else:
|
||||||
form = LoginForm()
|
return redirect('/login')
|
||||||
if form.validate_on_submit():
|
|
||||||
db_sess = db_session.create_session()
|
|
||||||
user = db_sess.query(User).filter(User.email == form.login.data).first()
|
@app.route('/profile', methods=['GET', 'POST'])
|
||||||
if user and user.check_password(form.password.data):
|
def profile():
|
||||||
if user.activated:
|
if current_user.is_authenticated:
|
||||||
login_user(user, remember=form.remember_me.data)
|
form = EditProfileForm(
|
||||||
return redirect('/')
|
CombinedMultiDict((request.files, request.form)),
|
||||||
else:
|
email=current_user.email,
|
||||||
return render_template('login.html',
|
name=current_user.name,
|
||||||
message="Ваша почта не подтверждена",
|
surname=current_user.surname,
|
||||||
danger=True,
|
about=current_user.about,
|
||||||
form=form)
|
birthday=current_user.birthday
|
||||||
return render_template('login.html',
|
)
|
||||||
message="Неправильный логин или пароль",
|
if form.del_photo.data:
|
||||||
danger=True,
|
data_session = db_session.create_session()
|
||||||
form=form)
|
user = data_session.query(User).filter(User.id == current_user.id).first()
|
||||||
return render_template('login.html', title='Авторизация', form=form, message=message,
|
if not user:
|
||||||
danger=danger)
|
return render_template('profile.html', title='Профиль', form=form,
|
||||||
else:
|
message='Ошибка, пользователь ненайден')
|
||||||
return redirect('/')
|
os.remove(current_user.photo)
|
||||||
|
user.photo = 'static/images/none_logo.png'
|
||||||
|
data_session.commit()
|
||||||
@app.route('/logout')
|
data_session.close()
|
||||||
@login_required
|
if form.validate_on_submit():
|
||||||
def logout():
|
data_session = db_session.create_session()
|
||||||
logout_user()
|
user = data_session.query(User).filter(User.id == current_user.id).first()
|
||||||
return redirect("/")
|
if not user:
|
||||||
|
return render_template('profile.html', title='Профиль', form=form,
|
||||||
|
message='Ошибка, пользователь ненайден')
|
||||||
@app.route('/register', methods=['GET', 'POST'])
|
if form.email.data != current_user.email:
|
||||||
def register():
|
pass
|
||||||
if not current_user.is_authenticated:
|
if form.photo.data:
|
||||||
form = RegisterForm()
|
with open(f'static/app_files/user_logo/{current_user.login}.png', 'wb') as file:
|
||||||
if form.validate_on_submit():
|
form.photo.data.save(file)
|
||||||
data_session = db_session.create_session()
|
user.photo = f'static/app_files/user_logo/{current_user.login}.png'
|
||||||
if data_session.query(User).filter(User.login == form.login.data).first():
|
user.name = form.name.data
|
||||||
return render_template('register.html', form=form, message="Такой пользователь уже есть",
|
user.surname = form.surname.data
|
||||||
title='Регистрация')
|
user.about = form.about.data
|
||||||
if data_session.query(User).filter(User.email == form.email.data).first():
|
user.birthday = form.birthday.data
|
||||||
return render_template('register.html', form=form, message="Такая почта уже есть", title='Регистрация')
|
data_session.commit()
|
||||||
status_password = check_password(form.password.data)
|
data_session.close()
|
||||||
if status_password != 'OK':
|
return redirect('/profile')
|
||||||
return render_template('register.html', form=form, message=status_password, title='Регистрация')
|
return render_template('profile.html', title='Профиль', form=form, message='')
|
||||||
user = User(
|
else:
|
||||||
email=form.email.data,
|
return redirect('/login')
|
||||||
name=form.name.data,
|
|
||||||
login=form.login.data,
|
|
||||||
activity=datetime.datetime.now()
|
@login_manager.user_loader
|
||||||
)
|
def load_user(user_id):
|
||||||
user.set_password(form.password.data)
|
db_sess = db_session.create_session()
|
||||||
data_session.add(user)
|
return db_sess.query(User).get(user_id)
|
||||||
data_session.commit()
|
|
||||||
data_session.close()
|
|
||||||
token = s.dumps(form.email.data)
|
@app.route('/login', methods=['GET', 'POST'])
|
||||||
link_conf = url_for('confirmation', token=token, _external=True)
|
def login():
|
||||||
mail(f'Для завершения регистрации пройдите по ссылке: {link_conf}', form.email.data,
|
if not current_user.is_authenticated:
|
||||||
'Подтверждение регистрации')
|
message = request.args.get('message') if request.args.get('message') else ''
|
||||||
return redirect('/login?message=Мы выслали ссылку для подтверждения почты')
|
danger = request.args.get('danger') if request.args.get('danger') else False
|
||||||
return render_template('register.html', form=form, message='', title='Регистрация')
|
form = LoginForm()
|
||||||
else:
|
if form.validate_on_submit():
|
||||||
return redirect('/')
|
db_sess = db_session.create_session()
|
||||||
|
user = db_sess.query(User).filter(User.email == form.login.data).first()
|
||||||
|
if user and user.check_password(form.password.data):
|
||||||
@app.route('/confirmation/<token>')
|
if user.activated:
|
||||||
def confirmation(token):
|
login_user(user, remember=form.remember_me.data)
|
||||||
try:
|
return redirect('/')
|
||||||
user_email = s.loads(token, max_age=86400)
|
else:
|
||||||
data_session = db_session.create_session()
|
return render_template('login.html',
|
||||||
user = data_session.query(User).filter(User.email == user_email).first()
|
message="Ваша почта не подтверждена",
|
||||||
if user:
|
danger=True,
|
||||||
user.activated = True
|
form=form)
|
||||||
data_session.commit()
|
return render_template('login.html',
|
||||||
data_session.close()
|
message="Неправильный логин или пароль",
|
||||||
return redirect('/login?message=Почта успешно подтверждена')
|
danger=True,
|
||||||
else:
|
form=form)
|
||||||
return redirect('/login?message=Пользователь не найден&danger=True')
|
return render_template('login.html', title='Авторизация', form=form, message=message,
|
||||||
except SignatureExpired:
|
danger=danger)
|
||||||
data_session = db_session.create_session()
|
else:
|
||||||
users = data_session.query(User).filter(
|
return redirect('/project')
|
||||||
User.activated == 0 and User.activated < datetime.datetime.now() - datetime.timedelta(days=1)).all()
|
|
||||||
if users:
|
|
||||||
list(map(lambda x: data_session.delete(x), users))
|
@app.route('/logout')
|
||||||
data_session.commit()
|
@login_required
|
||||||
data_session.close()
|
def logout():
|
||||||
return redirect('/login?message=Срок действия ссылки истек, данные удалены&danger=True')
|
logout_user()
|
||||||
|
return redirect("/")
|
||||||
|
|
||||||
def main():
|
|
||||||
db_session.global_init("db/incepted.db")
|
@app.route('/register', methods=['GET', 'POST'])
|
||||||
serve(app, host='0.0.0.0', port=5000)
|
def register():
|
||||||
|
if not current_user.is_authenticated:
|
||||||
|
form = RegisterForm()
|
||||||
if __name__ == '__main__':
|
if form.validate_on_submit():
|
||||||
main()
|
data_session = db_session.create_session()
|
||||||
|
if data_session.query(User).filter(User.login == form.login.data).first():
|
||||||
|
return render_template('register.html', form=form, message="Такой пользователь уже есть",
|
||||||
|
title='Регистрация')
|
||||||
|
if data_session.query(User).filter(User.email == form.email.data).first():
|
||||||
|
return render_template('register.html', form=form, message="Такая почта уже есть", title='Регистрация')
|
||||||
|
status_password = check_password(form.password.data)
|
||||||
|
if status_password != 'OK':
|
||||||
|
return render_template('register.html', form=form, message=status_password, title='Регистрация')
|
||||||
|
user = User(
|
||||||
|
email=form.email.data,
|
||||||
|
name=form.name.data,
|
||||||
|
login=form.login.data,
|
||||||
|
activity=datetime.datetime.now(),
|
||||||
|
data_reg=datetime.date.today(),
|
||||||
|
photo='static/images/none_logo.png',
|
||||||
|
role='user'
|
||||||
|
)
|
||||||
|
user.set_password(form.password.data)
|
||||||
|
data_session.add(user)
|
||||||
|
data_session.commit()
|
||||||
|
data_session.close()
|
||||||
|
token = s.dumps(form.email.data)
|
||||||
|
link_conf = url_for('confirmation', token=token, _external=True)
|
||||||
|
mail(f'Для завершения регистрации пройдите по ссылке: {link_conf}', form.email.data,
|
||||||
|
'Подтверждение регистрации')
|
||||||
|
return redirect('/login?message=Мы выслали ссылку для подтверждения почты')
|
||||||
|
return render_template('register.html', form=form, message='', title='Регистрация')
|
||||||
|
else:
|
||||||
|
return redirect('/project')
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/confirmation/<token>')
|
||||||
|
def confirmation(token):
|
||||||
|
try:
|
||||||
|
user_email = s.loads(token, max_age=86400)
|
||||||
|
data_session = db_session.create_session()
|
||||||
|
user = data_session.query(User).filter(User.email == user_email).first()
|
||||||
|
if user:
|
||||||
|
user.activated = True
|
||||||
|
data_session.commit()
|
||||||
|
data_session.close()
|
||||||
|
return redirect('/login?message=Почта успешно подтверждена')
|
||||||
|
else:
|
||||||
|
return redirect('/login?message=Пользователь не найден&danger=True')
|
||||||
|
except SignatureExpired:
|
||||||
|
data_session = db_session.create_session()
|
||||||
|
users = data_session.query(User).filter(
|
||||||
|
User.activated == 0 and User.activated < datetime.datetime.now() - datetime.timedelta(days=1)).all()
|
||||||
|
if users:
|
||||||
|
list(map(lambda x: data_session.delete(x), users))
|
||||||
|
data_session.commit()
|
||||||
|
data_session.close()
|
||||||
|
return redirect('/login?message=Срок действия ссылки истек, данные удалены&danger=True')
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
db_session.global_init("db/incepted.db")
|
||||||
|
serve(app, host='0.0.0.0', port=5000)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|||||||
@ -1,51 +1,91 @@
|
|||||||
html {
|
html {
|
||||||
background-color: #fdf5e6;
|
background-color: #fdf5e6;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
}
|
}
|
||||||
.navbar {
|
.navbar {
|
||||||
background-color: #dcb495;
|
background-color: #dcb495;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
height: 8vw;
|
height: 8vw;
|
||||||
}
|
}
|
||||||
#navbar {
|
#navbar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
transition: top 0.3s;
|
transition: top 0.3s;
|
||||||
opacity: .9;
|
opacity: .9;
|
||||||
border-bottom: 1px solid #bf9c81;
|
border-bottom: 1px solid #bf9c81;
|
||||||
}
|
}
|
||||||
.auth_button {
|
.auth_button {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
transition: color 0.5s ease-in, border-bottom 0.5s ease-in;
|
transition: color 0.5s ease-in, border-bottom 0.5s ease-in;
|
||||||
}
|
}
|
||||||
.auth_button:hover {
|
.auth_button:hover {
|
||||||
color: #694a2d;
|
color: #694a2d;
|
||||||
border-bottom: 3px solid #f3c79e;
|
border-bottom: 3px solid #f3c79e;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
.footer {
|
.footer {
|
||||||
background-color: #171717;
|
background-color: #171717;
|
||||||
height: 15vw;
|
height: 15vw;
|
||||||
}
|
}
|
||||||
.footer_block {
|
.footer_block {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.footer_logo, .nav_logo {
|
.footer_logo, .nav_logo {
|
||||||
width: 7vw;
|
width: 7vw;
|
||||||
height: 6vw;
|
height: 6vw;
|
||||||
}
|
}
|
||||||
.footer_rights {
|
.footer_rights {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
width: 85%;
|
width: 85%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
}
|
||||||
|
.nav_panel {
|
||||||
|
width: 100%;
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.nav_user {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.nav_user_name {
|
||||||
|
margin-left: 10px;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
.nav_chapter_text {
|
||||||
|
height: 100%;
|
||||||
|
font-family: Georgia, 'Times New Roman', Times, serif;
|
||||||
|
font-style: bold;
|
||||||
|
color: #946137;
|
||||||
|
font-size: 2vw;
|
||||||
|
transition: color 0.3s ease-in;
|
||||||
|
}
|
||||||
|
.nav_chapter_text:hover {
|
||||||
|
color: #f3d5be;
|
||||||
|
}
|
||||||
|
.nav_chapter {
|
||||||
|
text-align: center;
|
||||||
|
width: 30%;
|
||||||
|
border-bottom: 0.2vw solid #d49d51;
|
||||||
|
transition: border-bottom 0.3s ease-in;
|
||||||
|
}
|
||||||
|
.nav_chapter:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: 0.2vw solid #face7d;
|
||||||
|
}
|
||||||
|
.nav_user_name_div {
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
@ -1,95 +1,95 @@
|
|||||||
#navbar {
|
#navbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.login_page {
|
.login_page {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 75vw;
|
height: 75vw;
|
||||||
background: linear-gradient( rgba(0, 0, 0, 0.55), rgba(0, 0, 0, 0.55) ), url(../images/back_main_one.jpg);background-repeat: repeat; background-position: center;
|
background: linear-gradient( rgba(0, 0, 0, 0.55), rgba(0, 0, 0, 0.55) ), url(../images/back_main_one.jpg);background-repeat: repeat; background-position: center;
|
||||||
}
|
}
|
||||||
.login {
|
.login {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
height: 50%;
|
height: 50%;
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
margin-right: 10%;
|
margin-right: 10%;
|
||||||
background-color: #dbc3af;
|
background-color: #dbc3af;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
}
|
}
|
||||||
.login_form {
|
.login_form {
|
||||||
margin-bottom: 10%;
|
margin-bottom: 10%;
|
||||||
}
|
}
|
||||||
.header_title {
|
.header_title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 3.5vw;
|
font-size: 3.5vw;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.data_block {
|
.data_block {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
.form_data, .form_data_button {
|
.form_data, .form_data_button {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-left: 2%;
|
margin-left: 2%;
|
||||||
margin-left: 2%;
|
margin-left: 2%;
|
||||||
}
|
}
|
||||||
.form_data_button {
|
.form_data_button {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.input_data {
|
.input_data {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
border: 0.1vw solid #595008;
|
border: 0.1vw solid #595008;
|
||||||
height: 4.7vw;
|
height: 4.7vw;
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
background-color: #dbc3af;
|
background-color: #dbc3af;
|
||||||
border-radius: 5vw;
|
border-radius: 5vw;
|
||||||
font-size: 1.3vw;
|
font-size: 1.3vw;
|
||||||
}
|
}
|
||||||
.input_button {
|
.input_button {
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
height: 5vw;
|
height: 5vw;
|
||||||
border-radius: 5vw;
|
border-radius: 5vw;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.form-label {
|
.form-label {
|
||||||
font-size: 1.3vw;
|
font-size: 1.3vw;
|
||||||
}
|
}
|
||||||
.login_button {
|
.login_button {
|
||||||
background-color: #000000;
|
background-color: #000000;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
.register_button {
|
.register_button {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
background-color: #f5c99f;
|
background-color: #f5c99f;
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
height: 5vw;
|
height: 5vw;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
border-radius: 5vw;
|
border-radius: 5vw;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
}
|
}
|
||||||
.register_button:hover {
|
.register_button:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
.register {
|
.register {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
.box {
|
.box {
|
||||||
margin-left: 9vw;
|
margin-left: 9vw;
|
||||||
}
|
}
|
||||||
@ -1,258 +1,271 @@
|
|||||||
main, html {
|
main, html {
|
||||||
background-color: #dcb495;
|
background-color: #dcb495;
|
||||||
}
|
}
|
||||||
#header_block {
|
#header_block {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
margin-bottom: 60%;
|
margin-bottom: 60%;
|
||||||
}
|
}
|
||||||
.header_block {
|
.header_block {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 75vw;
|
height: 75vw;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: linear-gradient( rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.85) ), url(../images/back_main_one.jpg);background-repeat: repeat; background-position: center;
|
background: linear-gradient( rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.85) ), url(../images/back_main_one.jpg);background-repeat: repeat; background-position: center;
|
||||||
}
|
}
|
||||||
.header_title {
|
.header_title {
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font: bold;
|
font: bold;
|
||||||
font-size: 4vw;
|
font-size: 4vw;
|
||||||
transition: font-size 0.5s ease-in, text-shadow 1s ease-in;
|
transition: font-size 0.5s ease-in, text-shadow 1s ease-in;
|
||||||
}
|
}
|
||||||
.header_title:hover {
|
.header_title:hover {
|
||||||
font-size: 4.05vw;
|
font-size: 4.05vw;
|
||||||
text-shadow: 0px 0px 20px #ffffff;
|
text-shadow: 0px 0px 20px #ffffff;
|
||||||
}
|
}
|
||||||
.header_title_2 {
|
.header_title_2 {
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
color: #afafaf;
|
color: #afafaf;
|
||||||
font: bold;
|
font: bold;
|
||||||
font-size: 2vw;
|
font-size: 2vw;
|
||||||
transition: font-size 0.5s ease-in, text-shadow 1s ease-in;
|
transition: font-size 0.5s ease-in, text-shadow 1s ease-in;
|
||||||
}
|
}
|
||||||
.header_title_2:hover {
|
.header_title_2:hover {
|
||||||
font-size: 2.05vw;
|
font-size: 2.05vw;
|
||||||
text-shadow: 0px 0px 20px #ffffff;
|
text-shadow: 0px 0px 20px #ffffff;
|
||||||
}
|
}
|
||||||
.header_buttons {
|
.header_buttons {
|
||||||
margin-top: 5%;
|
margin-top: 5%;
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.header_button {
|
.header_button {
|
||||||
background-color: #f5c99f;
|
background-color: #f5c99f;
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
height: 5vw;
|
height: 5vw;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
border-radius: 30px;
|
border-radius: 30px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.header_button:hover {
|
.header_button:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
#link_to_about {
|
#link_to_about {
|
||||||
margin-left: 40px;
|
margin-left: 40px;
|
||||||
background-color: #000000;
|
background-color: #000000;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
border: 2px solid #ffffff;
|
border: 2px solid #ffffff;
|
||||||
}
|
}
|
||||||
.header_button_text {
|
.header_button_text {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
margin-top: 5%;
|
margin-top: 5%;
|
||||||
}
|
}
|
||||||
.body_block {
|
.body_block {
|
||||||
background-color: #dcb495;
|
background-color: #dcb495;
|
||||||
}
|
}
|
||||||
.about_block {
|
.about_block {
|
||||||
margin-top: 10%;
|
margin-top: 10%;
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
.about_title {
|
.about_title {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 4vw;
|
font-size: 4vw;
|
||||||
}
|
}
|
||||||
.about_info_block {
|
.about_info_block {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
.about_article_block {
|
.about_article_block {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-content: space-around;
|
align-content: space-around;
|
||||||
}
|
}
|
||||||
.about_article {
|
.about_article {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.article_image {
|
.article_image {
|
||||||
width: 10vw;
|
width: 10vw;
|
||||||
height: 10vw;
|
height: 10vw;
|
||||||
}
|
}
|
||||||
.main_image {
|
.main_image {
|
||||||
width: 40vw;
|
width: 40vw;
|
||||||
height: 26vw;
|
height: 26vw;
|
||||||
}
|
}
|
||||||
.article_text {
|
.article_text {
|
||||||
max-width: 70%;
|
max-width: 70%;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
font-size: 1.3vw;
|
font-size: 1.3vw;
|
||||||
}
|
}
|
||||||
.how_work_block {
|
.how_work_block {
|
||||||
margin-top: 20%;
|
margin-top: 20%;
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
.how_work_title {
|
.how_work_title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 4vw;
|
font-size: 4vw;
|
||||||
}
|
}
|
||||||
.how_work_info_block {
|
.how_work_info_block {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
margin-top: 100px;
|
margin-top: 100px;
|
||||||
}
|
}
|
||||||
.how_work_image {
|
.how_work_image {
|
||||||
width: 10vw;
|
width: 10vw;
|
||||||
height: 10vw;
|
height: 10vw;
|
||||||
}
|
}
|
||||||
.how_work_info, .how_work_article {
|
.how_work_info, .how_work_article {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
.how_work_article_title {
|
.how_work_article_title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
}
|
}
|
||||||
.how_work_article_text {
|
.how_work_article_text {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 1vw;
|
margin-top: 1vw;
|
||||||
font-size: 1.1vw;
|
font-size: 1.1vw;
|
||||||
}
|
}
|
||||||
.reg_block {
|
.reg_block {
|
||||||
margin-top: 20%;
|
margin-top: 20%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 50vw;
|
height: 50vw;
|
||||||
}
|
}
|
||||||
.reg_content_block {
|
.reg_content_block {
|
||||||
margin-top: 100px;
|
margin-top: 100px;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
}
|
}
|
||||||
.reg_title {
|
.reg_title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 4vw;
|
font-size: 4vw;
|
||||||
}
|
}
|
||||||
.reg_content {
|
.reg_content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-self: center;
|
align-self: center;
|
||||||
align-content: space-evenly;
|
align-content: space-evenly;
|
||||||
}
|
}
|
||||||
.reg_button_group {
|
.reg_button_group {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.reg_button_title {
|
.reg_button_title {
|
||||||
margin-bottom: 10%;
|
margin-bottom: 10%;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 2.5vw;
|
font-size: 2.5vw;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
.reg_button_info {
|
.reg_button_info {
|
||||||
margin-top: 8%;
|
margin-top: 8%;
|
||||||
}
|
}
|
||||||
.reg_button_group {
|
.reg_button_group {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.reg_button {
|
.reg_button {
|
||||||
background-color: #a8886f;
|
background-color: #a8886f;
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
height: 5vw;
|
height: 5vw;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
border-radius: 30px;
|
border-radius: 30px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.reg_button:hover {
|
.reg_button:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
.reg_button_text {
|
.reg_button_text {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
margin-top: 6%;
|
margin-top: 6%;
|
||||||
}
|
}
|
||||||
#link_to_start{
|
#link_to_start{
|
||||||
width: 18vw;
|
width: 18vw;
|
||||||
background-color:#f5d3b8;
|
background-color:#f5d3b8;
|
||||||
}
|
}
|
||||||
#link_to_start_text {
|
#link_to_start_text {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
.feedback_block {
|
.feedback_block {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 75vw;
|
height: 75vw;
|
||||||
background: linear-gradient( rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.85) ), url(../images/back_main_two.jpg);background-repeat: repeat; background-position: center;
|
background: linear-gradient( rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.85) ), url(../images/back_main_two.jpg);background-repeat: repeat; background-position: center;
|
||||||
}
|
}
|
||||||
.feedback {
|
.feedback {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
height: 80%;
|
height: 80%;
|
||||||
margin-left: 25%;
|
margin-left: 25%;
|
||||||
margin-right: 25%;
|
margin-right: 25%;
|
||||||
background-color: #dcb495;
|
background-color: #dcb495;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
align-content: space-around;
|
align-content: space-around;
|
||||||
}
|
}
|
||||||
.feedback_title {
|
.feedback_title {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
margin-bottom: 20%;
|
margin-bottom: 20%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 3vw;
|
font-size: 3vw;
|
||||||
}
|
}
|
||||||
.feedback_logo {
|
.feedback_logo {
|
||||||
margin-bottom: 20%;
|
margin-bottom: 20%;
|
||||||
width: 10vw;
|
width: 10vw;
|
||||||
height: 10vw;
|
height: 10vw;
|
||||||
}
|
}
|
||||||
.feedback_mail, .feedback_mail_link {
|
.feedback_mail, .feedback_mail_link {
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
transition: color 0.5s ease-in, border-bottom 0.5s ease-in;
|
transition: color 0.5s ease-in, border-bottom 0.5s ease-in;
|
||||||
}
|
}
|
||||||
.feedback_mail_link:hover {
|
.feedback_mail_link:hover {
|
||||||
color: #694a2d;
|
color: #694a2d;
|
||||||
border-bottom: 3px solid #f3c79e;
|
border-bottom: 3px solid #f3c79e;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.scroll_button {
|
||||||
|
position: fixed;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
background-color: #e5e5e5;
|
||||||
|
border-radius: 2vw;
|
||||||
|
margin-left: 95%;
|
||||||
|
margin-top: 45%;
|
||||||
|
transition: background-color 0.5s ease-in;
|
||||||
|
}
|
||||||
|
.scroll_button:hover {
|
||||||
|
background-color: #1c59fe;
|
||||||
}
|
}
|
||||||
95
static/css/profile.css
Normal file
95
static/css/profile.css
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
.profile_page {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 70vw;
|
||||||
|
width: 100%;
|
||||||
|
background: linear-gradient( rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8) ), url(../images/back_profile_one.jpg);background-repeat: repeat; background-position: center;
|
||||||
|
}
|
||||||
|
.profile_block {
|
||||||
|
height: 80%;
|
||||||
|
width: 85%;
|
||||||
|
margin-left: 7.5%;
|
||||||
|
margin-top: 10%;
|
||||||
|
background: linear-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3) ), url(../images/back_profile_two.jpg);background-repeat: repeat; background-position: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.header_profile {
|
||||||
|
display: inline;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 15vw;
|
||||||
|
height: 15vw;
|
||||||
|
margin-top: 50px;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
.user_photo {
|
||||||
|
width: 15vw;
|
||||||
|
height: 15vw;
|
||||||
|
border: 0.2vw solid #ffffff;
|
||||||
|
border-radius: 2vw;
|
||||||
|
}
|
||||||
|
.edit_form {
|
||||||
|
align-self: center;
|
||||||
|
margin-top: 20px;
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.form_data_button {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
.form_blocks {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 50px;
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
.form_data, .form_data_button {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-left: 2%;
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
|
.form_data_button {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.input_data {
|
||||||
|
color: #000000;
|
||||||
|
border: 0.1vw solid #595008;
|
||||||
|
height: 4.5vw;
|
||||||
|
width: 20vw;
|
||||||
|
background-color: #dbc3af;
|
||||||
|
border-radius: 5vw;
|
||||||
|
font-size: 1.3vw;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.input_button {
|
||||||
|
width: 10vw;
|
||||||
|
height: 5vw;
|
||||||
|
border-radius: 5vw;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.form-label {
|
||||||
|
font-size: 1.3vw;
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.profile_button {
|
||||||
|
margin-top: 15px;
|
||||||
|
width: 20vw;
|
||||||
|
height: 5vw;
|
||||||
|
background-color: #000000;
|
||||||
|
color: #ffffff;
|
||||||
|
border-radius: 5vw;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 1.5vw;
|
||||||
|
}
|
||||||
|
#delete_button {
|
||||||
|
margin-top: 45px;
|
||||||
|
}
|
||||||
@ -1,80 +1,80 @@
|
|||||||
#navbar {
|
#navbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.register_page {
|
.register_page {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 75vw;
|
height: 75vw;
|
||||||
background: linear-gradient( rgba(0, 0, 0, 0.55), rgba(0, 0, 0, 0.55) ), url(../images/back_main_one.jpg);background-repeat: repeat; background-position: center;
|
background: linear-gradient( rgba(0, 0, 0, 0.55), rgba(0, 0, 0, 0.55) ), url(../images/back_main_one.jpg);background-repeat: repeat; background-position: center;
|
||||||
}
|
}
|
||||||
.register {
|
.register {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
height: 70%;
|
height: 70%;
|
||||||
margin-left: 15%;
|
margin-left: 15%;
|
||||||
margin-right: 15%;
|
margin-right: 15%;
|
||||||
background-color: #dbc3af;
|
background-color: #dbc3af;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
}
|
}
|
||||||
.register_form {
|
.register_form {
|
||||||
margin-bottom: 10%;
|
margin-bottom: 10%;
|
||||||
}
|
}
|
||||||
.header_title {
|
.header_title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 3.5vw;
|
font-size: 3.5vw;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.data_block {
|
.data_block {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.form_data, .form_data_button {
|
.form_data, .form_data_button {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-left: 2%;
|
margin-left: 2%;
|
||||||
margin-left: 2%;
|
margin-left: 2%;
|
||||||
}
|
}
|
||||||
.form_data_button {
|
.form_data_button {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.input_data {
|
.input_data {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
border: 0.1vw solid #595008;
|
border: 0.1vw solid #595008;
|
||||||
height: 4.5vw;
|
height: 4.5vw;
|
||||||
width: 60vw;
|
width: 60vw;
|
||||||
background-color: #dbc3af;
|
background-color: #dbc3af;
|
||||||
border-radius: 5vw;
|
border-radius: 5vw;
|
||||||
font-size: 1.3vw;
|
font-size: 1.3vw;
|
||||||
}
|
}
|
||||||
.input_button {
|
.input_button {
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
height: 5vw;
|
height: 5vw;
|
||||||
border-radius: 5vw;
|
border-radius: 5vw;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.form-label {
|
.form-label {
|
||||||
font-size: 1.3vw;
|
font-size: 1.3vw;
|
||||||
}
|
}
|
||||||
.register_button {
|
.register_button {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
width: 20vw;
|
width: 20vw;
|
||||||
height: 5vw;
|
height: 5vw;
|
||||||
background-color: #000000;
|
background-color: #000000;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
border-radius: 5vw;
|
border-radius: 5vw;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-size: 1.5vw;
|
font-size: 1.5vw;
|
||||||
}
|
}
|
||||||
.box {
|
.box {
|
||||||
margin-left: 9vw;
|
margin-left: 9vw;
|
||||||
}
|
}
|
||||||
BIN
static/images/back_profile_one.jpg
Normal file
BIN
static/images/back_profile_one.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
BIN
static/images/back_profile_two.jpg
Normal file
BIN
static/images/back_profile_two.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 120 KiB |
BIN
static/images/none_logo.png
Executable file
BIN
static/images/none_logo.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@ -1,45 +1,58 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ru">
|
<html lang="ru">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8" />
|
||||||
<link rel="stylesheet" href="../static/css/base.css"/>
|
<link rel="stylesheet" href="../static/css/base.css" />
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
|
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
|
||||||
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
|
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
|
||||||
crossorigin="anonymous"
|
crossorigin="anonymous"
|
||||||
/>
|
/>
|
||||||
<link rel="icon" href="../static/images/logo_b.ico" type="image/x-icon"/>
|
<link rel="icon" href="../static/images/logo_b.ico" type="image/x-icon" />
|
||||||
<title>{{title}}</title>
|
<title>{{title}}</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script
|
<script
|
||||||
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js"
|
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js"
|
||||||
integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8"
|
integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8"
|
||||||
crossorigin="anonymous"
|
crossorigin="anonymous"
|
||||||
></script>
|
></script>
|
||||||
<nav class="navbar" id="navbar">
|
{% if current_user.is_authenticated %}
|
||||||
<div class="container-fluid">
|
<nav class="navbar">
|
||||||
<a class="navbar-brand" href="/">
|
<div class="nav_panel">
|
||||||
<img
|
<a class="nav_chapter" href="/profile">
|
||||||
src="../static/images/logo_b.png"
|
<div class="nav_user">
|
||||||
class="nav_logo"
|
<div class="nav_user_name_div"><p class="nav_user_name nav_chapter_text">{{current_user.name}}</p></div>
|
||||||
/>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
{% if current_user.is_authenticated %}
|
<a class="nav_chapter" href="/projects">
|
||||||
<a class="auth_button" href="/logout">Выход</a>
|
<p class="nav_chapter_text">Проекты</p>
|
||||||
{% else %}
|
</a>
|
||||||
<a class="auth_button" href="/login">Авторизация</a>
|
<a class="nav_chapter" href="/messages">
|
||||||
{% endif %}
|
<p class="nav_chapter_text">Сообщения</p>
|
||||||
</div>
|
</a>
|
||||||
</nav>
|
</div>
|
||||||
<!-- Begin page content -->
|
</nav>
|
||||||
<main role="main">{% block content %}{% endblock %}</main>
|
{% else %}
|
||||||
<footer class="footer">
|
<nav class="navbar" id="navbar">
|
||||||
<div class="footer_block">
|
<div class="container-fluid">
|
||||||
<a href="/#header_block"><img class="footer_logo" src="../static/images/logo_w.png"></a>
|
<a class="navbar-brand" href="/">
|
||||||
<strong class="footer_rights">© All rights reserved</strong>
|
<img src="../static/images/logo_b.png" class="nav_logo" />
|
||||||
</div>
|
</a>
|
||||||
</footer>
|
<a class="auth_button" href="/login">Авторизация</a>
|
||||||
</body>
|
</div>
|
||||||
</html>
|
</nav>
|
||||||
|
{% endif %}
|
||||||
|
<!-- Begin page content -->
|
||||||
|
<main role="main">{% block content %}{% endblock %}</main>
|
||||||
|
<footer class="footer">
|
||||||
|
<div class="footer_block">
|
||||||
|
<a href="/#header_block"
|
||||||
|
><img class="footer_logo" src="../static/images/logo_w.png"
|
||||||
|
/></a>
|
||||||
|
<strong class="footer_rights">© All rights reserved</strong>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
@ -1,55 +1,55 @@
|
|||||||
<link rel="stylesheet" href="../static/css/login.css"/>
|
<link rel="stylesheet" href="../static/css/login.css"/>
|
||||||
{% extends "base.html" %} {% block content %}
|
{% extends "base.html" %} {% block content %}
|
||||||
<div class="login_page">
|
<div class="login_page">
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<h1 class="header_title">Авторизация</h1>
|
<h1 class="header_title">Авторизация</h1>
|
||||||
<div>
|
<div>
|
||||||
<form action="" method="post" class="login_form">
|
<form action="" method="post" class="login_form">
|
||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
<div class="data_block">
|
<div class="data_block">
|
||||||
<div class="form_data">
|
<div class="form_data">
|
||||||
<label class="form-label">{{ form.login.label }}</label>
|
<label class="form-label">{{ form.login.label }}</label>
|
||||||
{{ form.login(class="input_data", type="login", placeholder='example@mail.ex') }} {% for
|
{{ form.login(class="input_data", type="login", placeholder='example@mail.ex') }} {% for
|
||||||
error in form.login.errors %}
|
error in form.login.errors %}
|
||||||
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="form_data">
|
<div class="form_data">
|
||||||
<label class="form-label">{{ form.password.label }}</label>
|
<label class="form-label">{{ form.password.label }}</label>
|
||||||
{{ form.password(class="input_data", type="password", placeholder='good_password') }} {%
|
{{ form.password(class="input_data", type="password", placeholder='good_password') }} {%
|
||||||
for error in form.password.errors %}
|
for error in form.password.errors %}
|
||||||
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="form_data_button">
|
<div class="form_data_button">
|
||||||
{{ form.submit(type="submit", class="input_button login_button") }}
|
{{ form.submit(type="submit", class="input_button login_button") }}
|
||||||
<a class="input_button register_button" type="submit" href="/register">
|
<a class="input_button register_button" type="submit" href="/register">
|
||||||
<div class="register"><strong>Регистрация</strong></div>
|
<div class="register"><strong>Регистрация</strong></div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
{{ form.remember_me(class="remember")}} {{
|
{{ form.remember_me(class="remember")}} {{
|
||||||
form.remember_me.label }}<br/>
|
form.remember_me.label }}<br/>
|
||||||
{% for error in form.remember_me.errors %}
|
{% for error in form.remember_me.errors %}
|
||||||
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="message_block">
|
<div class="message_block">
|
||||||
{% if message != '' %}
|
{% if message != '' %}
|
||||||
{% if danger %}
|
{% if danger %}
|
||||||
<div class="alert alert-danger message" role="alert">
|
<div class="alert alert-danger message" role="alert">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="alert alert-success message" role="alert">
|
<div class="alert alert-success message" role="alert">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -1,115 +1,118 @@
|
|||||||
<link rel="stylesheet" href="../static/css/main.css">
|
<link rel="stylesheet" href="../static/css/main.css">
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="header_block">
|
<rect class="scroll_button">
|
||||||
<div id="header_block"></div>
|
<img class="scroll_image" src="">
|
||||||
<div class="header_text">
|
</rect>
|
||||||
<h2 class="header_title">INCEPTED</h2>
|
<div class="header_block">
|
||||||
<strong class="header_title_2">Самый удобный сайт для создания проектов</strong>
|
<div id="header_block"></div>
|
||||||
</div>
|
<div class="header_text">
|
||||||
<div class="header_buttons">
|
<h2 class="header_title">INCEPTED</h2>
|
||||||
<a class="header_button" href="/register">
|
<strong class="header_title_2">Самый удобный сайт для создания проектов</strong>
|
||||||
<div class="header_button_text">
|
</div>
|
||||||
<p>Регистрация</p>
|
<div class="header_buttons">
|
||||||
</div>
|
<a class="header_button" href="/register">
|
||||||
</a>
|
<div class="header_button_text">
|
||||||
<a class="header_button" id="link_to_about" href="#about_block">
|
<p>Регистрация</p>
|
||||||
<div class="header_button_text">
|
</div>
|
||||||
<p>Больше о нас</p>
|
</a>
|
||||||
</div>
|
<a class="header_button" id="link_to_about" href="#about_block">
|
||||||
</a>
|
<div class="header_button_text">
|
||||||
</div>
|
<p>Больше о нас</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="about_block"></div>
|
</a>
|
||||||
<div class="body_block">
|
</div>
|
||||||
<div class="about_block">
|
</div>
|
||||||
<h2 class="about_title">Почему INCEPTED?</h2>
|
<div id="about_block"></div>
|
||||||
<div class="about_info_block">
|
<div class="body_block">
|
||||||
<div class="about_article_block">
|
<div class="about_block">
|
||||||
<div class="about_article">
|
<h2 class="about_title">Почему INCEPTED?</h2>
|
||||||
<img class="article_image" src="../static/images/yellow_man.svg">
|
<div class="about_info_block">
|
||||||
<strong class="article_text">Проект INCEPTED позволяет создавать проекты, поддерживать их, вести
|
<div class="about_article_block">
|
||||||
учет активности участников,
|
<div class="about_article">
|
||||||
контролировать их материалы и получать уведомления по истечению срока дедлайна</strong>
|
<img class="article_image" src="../static/images/yellow_man.svg">
|
||||||
</div>
|
<strong class="article_text">Проект INCEPTED позволяет создавать проекты, поддерживать их, вести
|
||||||
<div class="about_article">
|
учет активности участников,
|
||||||
<img class="article_image" src="../static/images/yellow_cup.svg">
|
контролировать их материалы и получать уведомления по истечению срока дедлайна</strong>
|
||||||
<strong class="article_text">Индивидуальные и расширенные возможности по созданию проектов</strong>
|
</div>
|
||||||
</div>
|
<div class="about_article">
|
||||||
<div class="about_article">
|
<img class="article_image" src="../static/images/yellow_cup.svg">
|
||||||
<img class="article_image" src="../static/images/yellow_like.svg">
|
<strong class="article_text">Индивидуальные и расширенные возможности по созданию проектов</strong>
|
||||||
<strong class="article_text">Быстро, удобно, без лишних функций</strong>
|
</div>
|
||||||
</div>
|
<div class="about_article">
|
||||||
</div>
|
<img class="article_image" src="../static/images/yellow_like.svg">
|
||||||
<img src="../static/images/main_image_1.jpg" class="main_image">
|
<strong class="article_text">Быстро, удобно, без лишних функций</strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="how_work_block">
|
<img src="../static/images/main_image_1.jpg" class="main_image">
|
||||||
<h2 class="how_work_title">Как это работает ?</h2>
|
</div>
|
||||||
<div class="how_work_info_block">
|
</div>
|
||||||
<div class="how_work_info">
|
<div class="how_work_block">
|
||||||
<img src="../static/images/main_image_2.png" class="how_work_image">
|
<h2 class="how_work_title">Как это работает ?</h2>
|
||||||
<div class="how_work_article">
|
<div class="how_work_info_block">
|
||||||
<strong class="how_work_article_title">Появление идеи</strong>
|
<div class="how_work_info">
|
||||||
<p class="how_work_article_text">Вы в любой момент можете создать и заполнить описание проекта, как
|
<img src="../static/images/main_image_2.png" class="how_work_image">
|
||||||
и построить задачи для него.</p>
|
<div class="how_work_article">
|
||||||
</div>
|
<strong class="how_work_article_title">Появление идеи</strong>
|
||||||
</div>
|
<p class="how_work_article_text">Вы в любой момент можете создать и заполнить описание проекта, как
|
||||||
<div class="how_work_info">
|
и построить задачи для него.</p>
|
||||||
<img src="../static/images/main_image_3.png" class="how_work_image">
|
</div>
|
||||||
<div class="how_work_article">
|
</div>
|
||||||
<strong class="how_work_article_title">Сбор команды</strong>
|
<div class="how_work_info">
|
||||||
<p class="how_work_article_text">Вы можете добавить участников в свою команду и дать им необходимые
|
<img src="../static/images/main_image_3.png" class="how_work_image">
|
||||||
задачи.</p>
|
<div class="how_work_article">
|
||||||
</div>
|
<strong class="how_work_article_title">Сбор команды</strong>
|
||||||
</div>
|
<p class="how_work_article_text">Вы можете добавить участников в свою команду и дать им необходимые
|
||||||
<div class="how_work_info">
|
задачи.</p>
|
||||||
<img src="../static/images/main_image_4.png" class="how_work_image">
|
</div>
|
||||||
<div class="how_work_article">
|
</div>
|
||||||
<strong class="how_work_article_title">Проверка выполнения</strong>
|
<div class="how_work_info">
|
||||||
<p class="how_work_article_text">В редакторе проекта вы можете отслеживать выполнение задач
|
<img src="../static/images/main_image_4.png" class="how_work_image">
|
||||||
участников и проверять их</p>
|
<div class="how_work_article">
|
||||||
</div>
|
<strong class="how_work_article_title">Проверка выполнения</strong>
|
||||||
</div>
|
<p class="how_work_article_text">В редакторе проекта вы можете отслеживать выполнение задач
|
||||||
<div class="how_work_info">
|
участников и проверять их</p>
|
||||||
<img src="../static/images/main_image_5.png" class="how_work_image">
|
</div>
|
||||||
<div class="how_work_article">
|
</div>
|
||||||
<strong class="how_work_article_title">Представление проекта</strong>
|
<div class="how_work_info">
|
||||||
<p class="how_work_article_text">После завершения проекта вы можете вывести в виде архива со всеми
|
<img src="../static/images/main_image_5.png" class="how_work_image">
|
||||||
нужными файлами или заморозить его.</p>
|
<div class="how_work_article">
|
||||||
</div>
|
<strong class="how_work_article_title">Представление проекта</strong>
|
||||||
</div>
|
<p class="how_work_article_text">После завершения проекта вы можете вывести в виде архива со всеми
|
||||||
</div>
|
нужными файлами или заморозить его.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="reg_block">
|
</div>
|
||||||
<h2 class="reg_title">Зарегистрируйся и пользуйся!</h2>
|
</div>
|
||||||
<div class="reg_content_block">
|
</div>
|
||||||
<div class="reg_content">
|
<div class="reg_block">
|
||||||
<p class="reg_button_title">Проектирование ждет тебя !</p>
|
<h2 class="reg_title">Зарегистрируйся и пользуйся!</h2>
|
||||||
<div class="reg_button_group">
|
<div class="reg_content_block">
|
||||||
<a class="reg_button" href="/register">
|
<div class="reg_content">
|
||||||
<div class="reg_button_text">
|
<p class="reg_button_title">Проектирование ждет тебя !</p>
|
||||||
<p>Регистрация</p>
|
<div class="reg_button_group">
|
||||||
</div>
|
<a class="reg_button" href="/register">
|
||||||
</a>
|
<div class="reg_button_text">
|
||||||
<a class="reg_button" id="link_to_start" href="#header_block">
|
<p>Регистрация</p>
|
||||||
<div class="reg_button_text" id="link_to_start_text">
|
</div>
|
||||||
<p>В самое начало</p>
|
</a>
|
||||||
</div>
|
<a class="reg_button" id="link_to_start" href="#header_block">
|
||||||
</a>
|
<div class="reg_button_text" id="link_to_start_text">
|
||||||
</div>
|
<p>В самое начало</p>
|
||||||
<p class="reg_button_info">Регистрируясь, вы подтверждаете политику конфиденциальности.</p>
|
</div>
|
||||||
</div>
|
</a>
|
||||||
<img src="../static/images/main_image_6.jpg" class="main_image">
|
</div>
|
||||||
</div>
|
<p class="reg_button_info">Регистрируясь, вы подтверждаете политику конфиденциальности.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feedback_block">
|
<img src="../static/images/main_image_6.jpg" class="main_image">
|
||||||
<div class="feedback">
|
</div>
|
||||||
<h2 class="feedback_title">Вы можете связаться с нами:</h2>
|
</div>
|
||||||
<img class="feedback_logo" src="../static/images/logo_b.png">
|
<div class="feedback_block">
|
||||||
<p><strong class="feedback_mail">Почта:</strong> <a class="feedback_mail_link" href="mailto:incepted@yandex.ru" class="feedback_mail">incepted@yandex.ru</a></p>
|
<div class="feedback">
|
||||||
</div>
|
<h2 class="feedback_title">Вы можете связаться с нами:</h2>
|
||||||
</div>
|
<img class="feedback_logo" src="../static/images/logo_b.png">
|
||||||
</div>
|
<p><strong class="feedback_mail">Почта:</strong> <a class="feedback_mail_link" href="mailto:incepted@yandex.ru" class="feedback_mail">incepted@yandex.ru</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
79
templates/profile.html
Normal file
79
templates/profile.html
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<link rel="stylesheet" href="../static/css/profile.css"/>
|
||||||
|
{% extends "base.html" %} {% block content %}
|
||||||
|
<div class="profile_page">
|
||||||
|
<div class="profile_block">
|
||||||
|
<div class="header_profile">
|
||||||
|
<img class="user_photo" src="../{{current_user.photo}}">
|
||||||
|
</div>
|
||||||
|
<div class="edit_form">
|
||||||
|
<form action="" method="post" class="register_form" enctype="multipart/form-data">
|
||||||
|
{{ form.hidden_tag() }}
|
||||||
|
<div class="form_blocks">
|
||||||
|
<div class="data_block">
|
||||||
|
<div class="form_data">
|
||||||
|
<label class="form-label">{{ form.email.label }}</label>
|
||||||
|
{{ form.email(class="input_data", type="email", placeholder='example@mail.ex') }} {% for
|
||||||
|
error in form.email.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="form_data">
|
||||||
|
<label class="form-label">{{ form.name.label }}</label>
|
||||||
|
{{ form.name(class="input_data", type="name", placeholder='name') }} {%
|
||||||
|
for error in form.name.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="form_data">
|
||||||
|
<label class="form-label">{{ form.surname.label }}</label>
|
||||||
|
{{ form.surname(class="input_data", type="surname", placeholder='surname') }}
|
||||||
|
{% for error in form.surname.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="data_block">
|
||||||
|
<div class="form_data">
|
||||||
|
<label class="form-label">{{ form.birthday.label }}</label>
|
||||||
|
{{ form.birthday(class="input_data", type="date") }}
|
||||||
|
{% for error in form.birthday.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">
|
||||||
|
{{ error }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="form_data">
|
||||||
|
<label class="form-label">{{ form.about.label }}</label>
|
||||||
|
{{ form.about(class="input_data", type="name", placeholder='about') }} {%
|
||||||
|
for error in form.about.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% if 'none' in current_user.photo %}
|
||||||
|
<div class="form_data">
|
||||||
|
<label class="form-label">{{ form.photo.label }}</label>
|
||||||
|
{{ form.photo(class="input_data", type="file") }}
|
||||||
|
{% for error in form.photo.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="form_data_button">
|
||||||
|
{{ form.del_photo(type="submit", class="profile_button", id="delete_button") }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="message_block">
|
||||||
|
{% if message != '' %}
|
||||||
|
<div class="alert alert-danger message" role="alert">{{ message }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form_data_button">
|
||||||
|
{{ form.submit(type="submit", class="profile_button") }}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
Loading…
x
Reference in New Issue
Block a user