Добавил кнопку раскрытия редактора профиля

This commit is contained in:
Andrei 2022-12-25 20:24:38 +05:00
parent 4a8a967d86
commit f05d705219
8 changed files with 120 additions and 46 deletions

View File

@ -1,8 +1,5 @@
from datetime import date
import sqlalchemy import sqlalchemy
from flask_login import UserMixin from flask_login import UserMixin
from werkzeug.security import check_password_hash, generate_password_hash
from .db_session import SqlAlchemyBase from .db_session import SqlAlchemyBase

View File

@ -22,7 +22,7 @@ class User(SqlAlchemyBase, UserMixin):
password = sqlalchemy.Column(sqlalchemy.String, nullable=True) password = sqlalchemy.Column(sqlalchemy.String, nullable=True)
data_reg = sqlalchemy.Column(sqlalchemy.Date, data_reg = sqlalchemy.Column(sqlalchemy.Date,
default=date.today()) default=date.today())
role = sqlalchemy.Column(sqlalchemy.String, nullable=True) role = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("roles.id"), nullable=True)
activity = sqlalchemy.Column(sqlalchemy.DateTime, nullable=True) activity = sqlalchemy.Column(sqlalchemy.DateTime, nullable=True)
birthday = sqlalchemy.Column(sqlalchemy.Date, nullable=True) birthday = sqlalchemy.Column(sqlalchemy.Date, nullable=True)
activated = sqlalchemy.Column(sqlalchemy.Boolean, nullable=False, default=False) activated = sqlalchemy.Column(sqlalchemy.Boolean, nullable=False, default=False)

15
main.py
View File

@ -12,6 +12,7 @@ from forms.edit_profile import EditProfileForm
from forms.login import LoginForm from forms.login import LoginForm
from forms.register import RegisterForm from forms.register import RegisterForm
from data.users import User from data.users import User
from data.files import Files
from waitress import serve from waitress import serve
from data import db_session from data import db_session
@ -28,13 +29,13 @@ def base():
if not current_user.is_authenticated: if not current_user.is_authenticated:
return render_template('main.html', title='Главная') return render_template('main.html', title='Главная')
else: else:
return redirect('/project') return redirect('/projects')
@app.route('/project') @app.route('/projects')
def project(): def project():
if current_user.is_authenticated: if current_user.is_authenticated:
return redirect(f'/profile') return render_template('projects.html', title='Проекты')
else: else:
return redirect('/login') return redirect('/login')
@ -105,7 +106,7 @@ def login():
if user and user.check_password(form.password.data): if user and user.check_password(form.password.data):
if user.activated: if user.activated:
login_user(user, remember=form.remember_me.data) login_user(user, remember=form.remember_me.data)
return redirect('/') return redirect('/projects')
else: else:
return render_template('login.html', return render_template('login.html',
message="Ваша почта не подтверждена", message="Ваша почта не подтверждена",
@ -118,7 +119,7 @@ def login():
return render_template('login.html', title='Авторизация', form=form, message=message, return render_template('login.html', title='Авторизация', form=form, message=message,
danger=danger) danger=danger)
else: else:
return redirect('/project') return redirect('/projects')
@app.route('/logout') @app.route('/logout')
@ -149,7 +150,7 @@ def register():
activity=datetime.datetime.now(), activity=datetime.datetime.now(),
data_reg=datetime.date.today(), data_reg=datetime.date.today(),
photo='static/images/none_logo.png', photo='static/images/none_logo.png',
role='user' role=1
) )
user.set_password(form.password.data) user.set_password(form.password.data)
data_session.add(user) data_session.add(user)
@ -162,7 +163,7 @@ def register():
return redirect('/login?message=Мы выслали ссылку для подтверждения почты') return redirect('/login?message=Мы выслали ссылку для подтверждения почты')
return render_template('register.html', form=form, message='', title='Регистрация') return render_template('register.html', form=form, message='', title='Регистрация')
else: else:
return redirect('/project') return redirect('/projects')
@app.route('/confirmation/<token>') @app.route('/confirmation/<token>')

View File

@ -1,15 +1,15 @@
.profile_page { .profile_page {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 70vw; height: auto;
width: 100%; 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; 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 { .profile_block {
height: 83%; height: 65vw;
width: 85%; width: 85%;
margin-left: 7.5%; margin-left: 7.5%;
margin-top: 10%; margin-bottom: 6%;
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; 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; display: flex;
flex-direction: column; flex-direction: column;
@ -114,3 +114,53 @@ form {
font-size: 1.5vw; font-size: 1.5vw;
margin-top: 6%; margin-top: 6%;
} }
.open_button_block {
height: 35vw;
width: 85%;
margin-left: 7.5%;
margin-top: 3%;
margin-bottom: 6%;
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;
overflow-y: auto;
}
.open_button_content {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
justify-content: center;
align-items: center;
}
.open_button_title {
margin-bottom: 3%;
color: #ffffff;
font: bold;
font-size: 4.5vw;
}
.open_button_article {
margin-bottom: 5%;
color: #ffffff;
font: bold;
font-size: 2vw;
}
.open_button {
background-color: #ffffff;
color: #000000;
width: 20vw;
height: 5vw;
vertical-align: middle;
border-radius: 30px;
}
.open_button:hover {
text-decoration: none;
color: #000000;
}
.open_button_text {
width: 100%;
height: 100%;
text-align: center;
font-size: 1.5vw;
margin-top: 5%;
}

3
static/css/projects.css Normal file
View File

@ -0,0 +1,3 @@
.projects_page {
height: 65vw;
}

View File

@ -36,17 +36,17 @@
{% 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>

View File

@ -1,33 +1,49 @@
<link rel="stylesheet" href="../static/css/profile.css"/> <link rel="stylesheet" href="../static/css/profile.css"/>
{% extends "base.html" %} {% block content %} {% extends "base.html" %} {% block content %}
<div class="profile_page"> <div class="profile_page">
<div class="profile_block"> <div class="open_button_block">
<div class="open_button_content">
<h2 class="open_button_title">Профиль</h2>
<p class="open_button_article">Здесь можно поменять настройки учетной записи</p>
<a class="open_button" data-bs-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
<div class="open_button_text">
Редикторовать
</div>
</a>
</div>
</div>
<div class="profile_block collapse" id="collapseExample">
<div class="header_profile"> <div class="header_profile">
<img class="user_photo" src="../{{current_user.photo}}"> <img class="user_photo" src="../{{current_user.photo}}"/>
</div> </div>
<div class="edit_form"> <div class="edit_form">
<form action="" method="post" class="register_form" enctype="multipart/form-data"> <form
action=""
method="post"
class="register_form"
enctype="multipart/form-data">
{{ form.hidden_tag() }} {{ form.hidden_tag() }}
<div class="form_blocks"> <div class="form_blocks">
<div class="data_block"> <div class="data_block">
<div class="form_data"> <div class="form_data">
<label class="form-label">{{ form.email.label }}</label> <label class="form-label">{{ form.email.label }}</label>
{{ form.email(class="input_data", type="email", placeholder='example@mail.ex') }} {% for {{ form.email(class="input_data", type="email",
error in form.email.errors %} placeholder='example@mail.ex') }} {% for error in
form.email.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.name.label }}</label> <label class="form-label">{{ form.name.label }}</label>
{{ form.name(class="input_data", type="name", placeholder='name') }} {% {{ form.name(class="input_data", type="name", placeholder='name')
for error in form.name.errors %} }} {% for error in form.name.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.surname.label }}</label> <label class="form-label">{{ form.surname.label }}</label>
{{ form.surname(class="input_data", type="surname", placeholder='surname') }} {{ form.surname(class="input_data", type="surname",
{% for error in form.surname.errors %} placeholder='surname') }} {% for error in form.surname.errors %}
<div class="alert alert-danger" role="alert">{{ error }}</div> <div class="alert alert-danger" role="alert">{{ error }}</div>
{% endfor %} {% endfor %}
</div> </div>
@ -35,36 +51,37 @@
<div class="data_block"> <div class="data_block">
<div class="form_data"> <div class="form_data">
<label class="form-label">{{ form.birthday.label }}</label> <label class="form-label">{{ form.birthday.label }}</label>
{{ form.birthday(class="input_data", type="date") }} {{ form.birthday(class="input_data", type="date") }} {% for error
{% for error in form.birthday.errors %} in form.birthday.errors %}
<div class="alert alert-danger" role="alert"> <div class="alert alert-danger" role="alert">{{ error }}</div>
{{ error }}
</div>
{% endfor %} {% endfor %}
</div> </div>
<div class="form_data"> <div class="form_data">
<label class="form-label">{{ form.about.label }}</label> <label class="form-label">{{ form.about.label }}</label>
{{ form.about(class="input_data dop_data", type="name", placeholder='about') }} {% {{ form.about(class="input_data dop_data", type="name",
for error in form.about.errors %} placeholder='about') }} {% for error in form.about.errors %}
<div class="alert alert-danger" role="alert">{{ error }}</div> <div class="alert alert-danger" role="alert">{{ error }}</div>
{% endfor %} {% endfor %}
</div> </div>
{% if 'none' in current_user.photo %} {% if 'none' in current_user.photo %}
<div class="form_data"> <div class="form_data">
<label class="form-label">{{ form.photo.label }}</label> <label class="form-label">{{ form.photo.label }}</label>
{{ form.photo(class="input_data dop_data", type="file") }} {{ form.photo(class="input_data dop_data", type="file") }} {% for
{% for error in form.photo.errors %} error in form.photo.errors %}
<div class="alert alert-danger" role="alert">{{ error }}</div> <div class="alert alert-danger" role="alert">{{ error }}</div>
{% endfor %} {% endfor %}
</div> </div>
{% else %} {% else %}
<div class="form_data_button"> <div class="form_data_button">
{{ form.del_photo(type="submit", class="profile_button", id="delete_button") }} {{ form.del_photo(type="submit", class="profile_button",
id="delete_button") }}
</div> </div>
{% endif %} {% endif %}
<div class="message_block"> <div class="message_block">
{% if message != '' %} {% if message != '' %}
<div class="alert alert-danger message" role="alert">{{ message }}</div> <div class="alert alert-danger message" role="alert">
{{ message }}
</div>
{% endif %} {% endif %}
</div> </div>
</div> </div>

6
templates/projects.html Normal file
View File

@ -0,0 +1,6 @@
<link rel="stylesheet" href="../static/css/projects.css"/>
{% extends "base.html" %} {% block content %}
<div class="projects_page">
</div>
{% endblock %}