Создан новый редактор профиля, прошлый был отключен и удален. Выпадающий список для перемещения по сайту был добавлен в раздел дневника. В разделе дневника убрал регистрацию, изменение профиля и авторизацию, теперь эти функции берет на себя основной раздел.
This commit is contained in:
parent
9267b8f39b
commit
aa56dba330
4
main.log
4
main.log
@ -0,0 +1,4 @@
|
||||
WARNING:waitress.queue:Task queue depth is 1
|
||||
WARNING:waitress.queue:Task queue depth is 1
|
||||
WARNING:waitress.queue:Task queue depth is 1
|
||||
WARNING:waitress.queue:Task queue depth is 1
|
||||
384
main.py
384
main.py
@ -86,58 +86,120 @@ def main_page():
|
||||
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
form = LoginForm()
|
||||
if form.validate_on_submit():
|
||||
db_sess = db_session.create_session()
|
||||
user = db_sess.query(User).filter(User.email == form.email.data).first()
|
||||
if user and user.check_password(form.password.data):
|
||||
login_user(user, remember=form.remember_me.data)
|
||||
return redirect('/')
|
||||
return render_template('main/login.html',
|
||||
message="Неправильный логин или пароль",
|
||||
form=form)
|
||||
return render_template('main/login.html', title='Авторизация', form=form, message='')
|
||||
if not current_user.is_authenticated:
|
||||
redir = request.args.get('redir') if request.args.get('redir') else False
|
||||
form = LoginForm()
|
||||
if form.validate_on_submit():
|
||||
db_sess = db_session.create_session()
|
||||
user = db_sess.query(User).filter(User.email == form.email.data).first()
|
||||
if user and user.check_password(form.password.data):
|
||||
login_user(user, remember=form.remember_me.data)
|
||||
if redir:
|
||||
return redirect(f'/{redir}')
|
||||
else:
|
||||
return redirect('/')
|
||||
return render_template('main/login.html',
|
||||
message="Неправильный логин или пароль",
|
||||
form=form)
|
||||
return render_template('main/login.html', title='Авторизация', form=form, message='')
|
||||
else:
|
||||
return redirect('/')
|
||||
|
||||
|
||||
@app.route('/register', methods=['GET', 'POST'])
|
||||
def register():
|
||||
form = RegisterForm()
|
||||
form.simple = True
|
||||
if form.validate_on_submit():
|
||||
if form.password.data != form.password2.data:
|
||||
return render_template('main/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Пароли не совпадают")
|
||||
data_session = db_session.create_session()
|
||||
if data_session.query(User).filter(User.login == form.login.data).first():
|
||||
return render_template('main/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Такой пользователь уже есть")
|
||||
if data_session.query(User).filter(User.email == form.email.data).first():
|
||||
return render_template('main/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Такая почта уже есть")
|
||||
if form.photo.data:
|
||||
photo = save_photo(form.photo.data, form.login.data)
|
||||
else:
|
||||
photo = False
|
||||
session['ps'] = form.password.data
|
||||
return redirect(
|
||||
url_for('confirmation', photo=photo, name=form.name.data, surname=form.surname.data, login=form.login.data,
|
||||
birthday=form.birthday.data, about=form.about.data, email=form.email.data, form=True))
|
||||
return render_template('main/register.html', title='Регистрация', form=form, message='')
|
||||
if not current_user.is_authenticated:
|
||||
form = RegisterForm()
|
||||
form.simple = True
|
||||
if form.validate_on_submit():
|
||||
if form.password.data != form.password2.data:
|
||||
return render_template('main/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Пароли не совпадают")
|
||||
data_session = db_session.create_session()
|
||||
if data_session.query(User).filter(User.login == form.login.data).first():
|
||||
return render_template('main/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Такой пользователь уже есть")
|
||||
if data_session.query(User).filter(User.email == form.email.data).first():
|
||||
return render_template('main/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Такая почта уже есть")
|
||||
if form.photo.data:
|
||||
photo = save_photo(form.photo.data, form.login.data)
|
||||
else:
|
||||
photo = False
|
||||
session['ps'] = form.password.data
|
||||
return redirect(
|
||||
url_for('confirmation', photo=photo, name=form.name.data, surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=form.birthday.data, about=form.about.data, email=form.email.data, form=True))
|
||||
return render_template('main/register.html', title='Регистрация', form=form, message='')
|
||||
else:
|
||||
return redirect('/')
|
||||
|
||||
|
||||
@app.route('/user/<string:login>', methods=['GET', 'POST'])
|
||||
def profile(login):
|
||||
if current_user.is_authenticated and current_user.login == login:
|
||||
message = request.args.get('message') if request.args.get('message') else ''
|
||||
form = RegisterForm()
|
||||
if form.del_photo.data:
|
||||
data_session = db_session.create_session()
|
||||
user = data_session.query(User).filter(User.id == current_user.id).first()
|
||||
os.remove(user.photo)
|
||||
user.photo = '/static/img/None_logo.png'
|
||||
data_session.commit()
|
||||
data_session.close()
|
||||
return redirect(f'/user/{login}')
|
||||
if request.method == 'GET':
|
||||
form.email.data = current_user.email
|
||||
form.name.data = current_user.name
|
||||
form.surname.data = current_user.surname
|
||||
form.birthday.data = current_user.birthday
|
||||
form.about.data = current_user.about
|
||||
form.photo.data = current_user.photo if current_user.photo and 'None' not in current_user.photo else None
|
||||
if form.submit2.data:
|
||||
data_session = db_session.create_session()
|
||||
user = data_session.query(User).filter(User.id == current_user.id).first()
|
||||
if user:
|
||||
if form.photo.data != current_user.photo:
|
||||
if form.photo.data:
|
||||
user.photo = save_photo(form.photo.data, login)
|
||||
user.name = form.name.data
|
||||
user.surname = form.surname.data
|
||||
user.birthday = form.birthday.data
|
||||
user.about = form.about.data
|
||||
data_session.commit()
|
||||
data_session.close()
|
||||
if form.email.data != current_user.email:
|
||||
if data_session.query(User).filter(User.email == form.email.data).first():
|
||||
return redirect(f'/user/{login}?message=Такая почта уже есть')
|
||||
session['ps'] = None
|
||||
return redirect(
|
||||
url_for('confirmation', email_conf=True, email=form.email.data, form=True)
|
||||
)
|
||||
return redirect(f'/user/{login}')
|
||||
else:
|
||||
abort(404)
|
||||
return render_template('main/profile.html', title='Профиль', form=form, message=message)
|
||||
elif current_user.is_authenticated and current_user.login != login:
|
||||
pass
|
||||
else:
|
||||
return redirect('/login')
|
||||
|
||||
|
||||
@app.route('/confirmation', methods=['GET', 'POST'])
|
||||
def confirmation():
|
||||
if request.args.get('form'):
|
||||
app_school = request.args.get('app_school') if request.args.get('app_school') else False
|
||||
email_conf = request.args.get('email_conf') if request.args.get('email_conf') else False
|
||||
data_session = db_session.create_session()
|
||||
form = RegisterForm(
|
||||
name=request.args.get('name'),
|
||||
surname=request.args.get('surname'),
|
||||
login=request.args.get('login'),
|
||||
birthday=request.args.get('age'),
|
||||
birthday=request.args.get('birthday'),
|
||||
about=request.args.get('about'),
|
||||
email=request.args.get('email'),
|
||||
password=session['ps']
|
||||
@ -163,36 +225,47 @@ def confirmation():
|
||||
conf = Confirmation()
|
||||
if conf.validate_on_submit():
|
||||
if str(conf.code_key.data).strip() == str(session['secret_code']).strip():
|
||||
if form.photo.data:
|
||||
user = User(
|
||||
name=form.name.data,
|
||||
surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=form.birthday.data,
|
||||
about=form.about.data,
|
||||
email=form.email.data,
|
||||
photo=session['photo'],
|
||||
role='user'
|
||||
)
|
||||
if not email_conf:
|
||||
if form.photo.data:
|
||||
user = User(
|
||||
name=form.name.data,
|
||||
surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=datetime.datetime.strptime(form.birthday.data, "%Y-%m-%d").date(),
|
||||
about=form.about.data,
|
||||
email=form.email.data,
|
||||
photo=save_photo(session['photo'], form.login.data),
|
||||
role='user'
|
||||
)
|
||||
else:
|
||||
user = User(
|
||||
name=form.name.data,
|
||||
surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=datetime.datetime.strptime(form.birthday.data, "%Y-%m-%d").date(),
|
||||
about=form.about.data,
|
||||
email=form.email.data,
|
||||
role='user',
|
||||
photo='/static/img/None_logo.png'
|
||||
)
|
||||
user.set_password(form.password.data)
|
||||
data_session.add(user)
|
||||
data_session.commit()
|
||||
data_session.close()
|
||||
session['send_msg'] = False
|
||||
if app_school:
|
||||
return redirect('/safeappschool/login')
|
||||
else:
|
||||
return redirect('/login')
|
||||
else:
|
||||
user = User(
|
||||
name=form.name.data,
|
||||
surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=form.birthday.data,
|
||||
about=form.about.data,
|
||||
email=form.email.data,
|
||||
role='user',
|
||||
photo='../../static/img/None_logo.png'
|
||||
)
|
||||
user.set_password(form.password.data)
|
||||
data_session.add(user)
|
||||
data_session.commit()
|
||||
session['send_msg'] = False
|
||||
if app_school:
|
||||
return redirect('/safeappschool/login')
|
||||
else:
|
||||
return redirect('/login')
|
||||
user = data_session.query(User).filter(User.id == current_user.id).first()
|
||||
if user:
|
||||
user.email = form.email.data
|
||||
data_session.commit()
|
||||
data_session.close()
|
||||
return redirect(f'/user/{current_user.login}')
|
||||
else:
|
||||
abort(404)
|
||||
else:
|
||||
session['no_code'] = True
|
||||
if app_school:
|
||||
@ -203,7 +276,8 @@ def confirmation():
|
||||
message='Коды не совпадают')
|
||||
else:
|
||||
if app_school:
|
||||
return render_template('safe_app_school/confirmation.html', title='Подтверждение', form=conf, message='')
|
||||
return render_template('safe_app_school/confirmation.html', title='Подтверждение', form=conf,
|
||||
message='')
|
||||
else:
|
||||
return render_template('main/confirmation_reg.html', title='Подтверждение', form=conf, message='')
|
||||
else:
|
||||
@ -281,7 +355,8 @@ def safe_app_school_register():
|
||||
return redirect(
|
||||
url_for('confirmation', photo=photo, name=form.name.data, surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=form.birthday.data, about=form.about.data, email=form.email.data, form=True, app_school=True))
|
||||
birthday=form.birthday.data, about=form.about.data, email=form.email.data, form=True,
|
||||
app_school=True))
|
||||
return render_template('safe_app_school/register.html', title='Регистрация', form=form, message='')
|
||||
|
||||
|
||||
@ -374,7 +449,7 @@ def edit_profile(logins):
|
||||
form = RegisterForm()
|
||||
session = db_session.create_session()
|
||||
ph_f = False
|
||||
if current_user.photo != '../../static/img/None_logo.png':
|
||||
if 'None_logo' not in current_user.photo:
|
||||
photo = current_user.photo
|
||||
ph_f = True
|
||||
else:
|
||||
@ -382,7 +457,6 @@ def edit_profile(logins):
|
||||
if form.del_photo.data:
|
||||
help_arg = photo
|
||||
ph_f = False
|
||||
photo = '../../static/img/None_logo.png'
|
||||
if form.submit2.data:
|
||||
user = session.query(User).filter(User.login == logins).first()
|
||||
if user.email != form.email.data:
|
||||
@ -400,9 +474,10 @@ def edit_profile(logins):
|
||||
user.surname = form.surname.data
|
||||
user.birthday = form.birthday.data
|
||||
user.about = form.about.data
|
||||
photo = '../../static/img/None_logo.png'
|
||||
if not ph_f and form.photo.data:
|
||||
photo = save_photo(form.photo.data, logins)
|
||||
if help_arg:
|
||||
if help_arg == photo:
|
||||
os.remove(help_arg)
|
||||
help_arg = False
|
||||
photo = '../../static/img/None_logo.png'
|
||||
@ -433,7 +508,7 @@ def edit_profile(logins):
|
||||
|
||||
|
||||
@app.route('/diary/profile')
|
||||
def profile():
|
||||
def diary_profile():
|
||||
if current_user.is_authenticated:
|
||||
global help_arg_2
|
||||
db_sess = db_session.create_session()
|
||||
@ -738,7 +813,7 @@ def post_edit(id):
|
||||
post_exc.nig_emot = post_ed.nig_emot.data
|
||||
post_exc.link = post_ed.link.data
|
||||
if help_arg:
|
||||
os.remove(help_arg[3:])
|
||||
os.remove(help_arg)
|
||||
help_arg = False
|
||||
if post_ed.photo.data:
|
||||
post_exc.photo = save_photo(post_ed.photo.data, current_user.login, post=True,
|
||||
@ -772,7 +847,7 @@ def post_deleted(id):
|
||||
pos = session.query(DiaryPost).filter(DiaryPost.id == id).first()
|
||||
if pos:
|
||||
if pos.photo:
|
||||
os.remove(pos.photo[3:])
|
||||
os.remove(pos.photo)
|
||||
likes = session.query(Like).filter(Like.post == pos.id).all()
|
||||
if likes:
|
||||
list(map(lambda i: session.delete(i), likes))
|
||||
@ -925,172 +1000,11 @@ def diary_logout():
|
||||
return redirect("/diary/")
|
||||
|
||||
|
||||
@app.route('/diary/login', methods=['GET', 'POST'])
|
||||
def diary_login():
|
||||
form = LoginForm()
|
||||
if form.validate_on_submit():
|
||||
db_sess = db_session.create_session()
|
||||
user = db_sess.query(User).filter(User.email == form.email.data).first()
|
||||
if user and user.check_password(form.password.data):
|
||||
login_user(user, remember=form.remember_me.data)
|
||||
return redirect("/diary/")
|
||||
return render_template('diary/login.html',
|
||||
message="Неправильный логин или пароль",
|
||||
form=form)
|
||||
return render_template('diary/login.html', title='Авторизация', form=form, message='')
|
||||
|
||||
|
||||
@app.route('/diary/confirmation', methods=['GET', 'POST'])
|
||||
def diary_onfirmation():
|
||||
global help_arg
|
||||
if help_arg:
|
||||
global send_msg
|
||||
global secret_code
|
||||
global photo
|
||||
global help_arg_2
|
||||
session = db_session.create_session()
|
||||
if not help_arg_2:
|
||||
form = help_arg
|
||||
if not send_msg:
|
||||
secret_code = secret_key()
|
||||
mail(f'Ваш секретный код: {secret_code}', form.email.data, 'Moona Код')
|
||||
send_msg = True
|
||||
conf = Confirmation()
|
||||
if conf.validate_on_submit():
|
||||
if str(conf.code_key.data).strip() == str(secret_code).strip():
|
||||
if form.photo.data:
|
||||
user = User(
|
||||
name=form.name.data,
|
||||
surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=form.birthday.data,
|
||||
about=form.about.data,
|
||||
email=form.email.data,
|
||||
photo=photo,
|
||||
role='user'
|
||||
)
|
||||
else:
|
||||
user = User(
|
||||
name=form.name.data,
|
||||
surname=form.surname.data,
|
||||
login=form.login.data,
|
||||
birthday=form.birthday.data,
|
||||
about=form.about.data,
|
||||
email=form.email.data,
|
||||
role='user',
|
||||
photo='../../static/img/None_logo.png'
|
||||
)
|
||||
user.set_password(form.password.data)
|
||||
session.add(user)
|
||||
session.commit()
|
||||
send_msg = False
|
||||
help_arg = False
|
||||
if form.simple:
|
||||
return redirect('/diary/simple/can_close')
|
||||
else:
|
||||
return redirect('/diary/login')
|
||||
else:
|
||||
if form.simple:
|
||||
return render_template('simple/simple_confirmation.html', title='Подтверждение', form=conf,
|
||||
message='Коды не совпадают')
|
||||
else:
|
||||
return render_template('diary/confirmation_reg.html', title='Подтверждение', form=conf,
|
||||
message='Коды не совпадают')
|
||||
if form.simple:
|
||||
return render_template('simple/simple_confirmation.html', title='Подтверждение', form=conf,
|
||||
message='Коды не совпадают')
|
||||
else:
|
||||
return render_template('diary/confirmation_reg.html', title='Подтверждение', form=conf, message='')
|
||||
else:
|
||||
conf = Confirmation()
|
||||
if not send_msg:
|
||||
secret_code = secret_key()
|
||||
mail(f'Ваш секретный код: {secret_code}', help_arg_2, 'Moona Код')
|
||||
send_msg = True
|
||||
if conf.validate_on_submit():
|
||||
if str(conf.code_key.data).strip() == str(secret_code).strip():
|
||||
user = session.query(User).filter(User.id == current_user.id).first()
|
||||
user.email = help_arg_2
|
||||
help_arg_2 = 'EditEmail'
|
||||
session.commit()
|
||||
send_msg = False
|
||||
help_arg = False
|
||||
return redirect('/diary/profile')
|
||||
|
||||
if form.simple:
|
||||
return render_template('simple_confirmation.html', title='Подтверждение', form=conf,
|
||||
message='Коды не совпадают')
|
||||
else:
|
||||
return render_template('diary/confirmation_reg.html', title='Подтверждение', form=conf, message='')
|
||||
else:
|
||||
return redirect('/diary/')
|
||||
|
||||
|
||||
@app.route('/diary/register', methods=['GET', 'POST'])
|
||||
def diary_register():
|
||||
global help_arg
|
||||
global photo
|
||||
form = RegisterForm()
|
||||
if form.validate_on_submit():
|
||||
if form.password.data != form.password2.data:
|
||||
return render_template('diary/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('diary/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Такой пользователь уже есть")
|
||||
if session.query(User).filter(User.email == form.email.data).first():
|
||||
return render_template('diary/register.html', title='Регистрация',
|
||||
form=form,
|
||||
message="Такая почта уже есть")
|
||||
help_arg = form
|
||||
if form.photo.data:
|
||||
photo = save_photo(form.photo.data, form.login.data)
|
||||
return redirect('/diary/confirmation')
|
||||
return render_template('diary/register.html', title='Регистрация', form=form, message='')
|
||||
|
||||
|
||||
@app.route('/diary/about_us')
|
||||
def about():
|
||||
return render_template('diary/about.html', title='О нас')
|
||||
|
||||
|
||||
@app.route('/diary/recovery', methods=['GET', 'POST'])
|
||||
def recovery():
|
||||
global send_msg
|
||||
global secret_code
|
||||
global help_arg
|
||||
global user_email
|
||||
form = RecoveryForm()
|
||||
conf = Conf()
|
||||
finish = Finish()
|
||||
session = db_session.create_session()
|
||||
if form.validate_on_submit() and form.email.data:
|
||||
user_email = form.email.data
|
||||
if not send_msg:
|
||||
secret_code = secret_key()
|
||||
mail(f'Ваш секретный код: {secret_code}', form.email.data, 'Восстановление пароля')
|
||||
send_msg = True
|
||||
return render_template('diary/recovery.html', title='Восстановление пароля', form=conf, message='', s='2')
|
||||
if conf.validate_on_submit():
|
||||
if str(conf.code_key.data).strip() == str(secret_code).strip():
|
||||
help_arg = True
|
||||
return render_template('diary/recovery.html', title='Восстановление пароля', form=finish, message='', s='3')
|
||||
if help_arg:
|
||||
if finish.validate_on_submit():
|
||||
db_sess = db_session.create_session()
|
||||
user = db_sess.query(User).filter(User.email == user_email).first()
|
||||
user.set_password(finish.password.data)
|
||||
user2 = session.merge(user)
|
||||
session.add(user2)
|
||||
session.commit()
|
||||
send_msg = False
|
||||
return redirect('/diary/login')
|
||||
return render_template('diary/recovery.html', title='Восстановление пароля', form=form, message='', s='1')
|
||||
|
||||
|
||||
@app.route('/school_app_check_auth', methods=['POST'])
|
||||
def check_auth():
|
||||
req = request.json
|
||||
|
||||
BIN
static/apk/SafeAppSchool.apk
Normal file
BIN
static/apk/SafeAppSchool.apk
Normal file
Binary file not shown.
@ -14,4 +14,9 @@ body {
|
||||
margin-right: auto;
|
||||
text-align: center;
|
||||
margin-top: 50px;
|
||||
}
|
||||
.user {
|
||||
background: linear-gradient(45deg, #d1c3fc, #9bc4fc);
|
||||
border-radius: 19px;
|
||||
border: 2px solid #ffffff;
|
||||
}
|
||||
@ -36,8 +36,12 @@
|
||||
width: 10%;
|
||||
margin-left: 12px;
|
||||
height: 42px;
|
||||
color: #ffffff;
|
||||
transition: box-shadow 1s ease-in, border 0.3s ease-in, background 2s ease-in;
|
||||
}
|
||||
.back_text {
|
||||
margin-top: 7%;
|
||||
text-align: center;
|
||||
.back:hover
|
||||
{
|
||||
border: 4px solid #ffffff;
|
||||
box-shadow: 0px 0px 50px #fff;
|
||||
background: rgb(0, 222, 0);
|
||||
}
|
||||
@ -41,8 +41,12 @@
|
||||
width: 10%;
|
||||
margin-left: 12px;
|
||||
height: 42px;
|
||||
color: #ffffff;
|
||||
transition: box-shadow 1s ease-in, border 0.3s ease-in, background 2s ease-in;
|
||||
}
|
||||
.back_text {
|
||||
margin-top: 7%;
|
||||
text-align: center;
|
||||
.back:hover
|
||||
{
|
||||
border: 4px solid #ffffff;
|
||||
box-shadow: 0px 0px 50px #fff;
|
||||
background: rgb(0, 222, 0);
|
||||
}
|
||||
@ -70,9 +70,9 @@
|
||||
height: 60px;
|
||||
}
|
||||
.user {
|
||||
background: linear-gradient(45deg, #d1c3fc, #9bc4fc);
|
||||
border-radius: 19px;
|
||||
border: 2px solid #ffffff;
|
||||
background: linear-gradient(45deg, #d1c3fc, #9bc4fc);
|
||||
}
|
||||
.button {
|
||||
width: 160px;
|
||||
|
||||
60
static/css/main/profile.css
Normal file
60
static/css/main/profile.css
Normal file
@ -0,0 +1,60 @@
|
||||
.profile {
|
||||
width: 70%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.head {
|
||||
width: 80%;
|
||||
margin-left: 10%;
|
||||
margin-right: 10%;
|
||||
}
|
||||
.user_photo {
|
||||
border-radius: 50%;
|
||||
width: 35%;
|
||||
margin-left: 32%;
|
||||
margin-right: 32%;
|
||||
border: 5px solid #ffffff;
|
||||
transition: box-shadow 1s ease-in, border 1s ease-in;
|
||||
}
|
||||
.user_photo:hover {
|
||||
border: 2px solid #ffffff;
|
||||
box-shadow: 0px 0px 50px #fff;
|
||||
}
|
||||
.user_name {
|
||||
text-align: center;
|
||||
color: white;
|
||||
margin-left: 27%;
|
||||
margin-right: 27%;
|
||||
width: 46%;
|
||||
height: auto;
|
||||
margin-top: 15px;
|
||||
transition: font-size 1s ease-in, text-shadow 1s ease-in;
|
||||
}
|
||||
.user_name:hover {
|
||||
font-size: 45;
|
||||
text-shadow: 0px 0px 20px #ffffff;
|
||||
}
|
||||
.photo_buttons {
|
||||
margin-top: 5px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
.submit_button {
|
||||
margin-top: 5px;
|
||||
margin-left: 45%;
|
||||
}
|
||||
.back {
|
||||
background: linear-gradient(45deg, #d1c3fc, #9bc4fc);
|
||||
border-radius: 19px;
|
||||
border: 2px solid #ffffff;
|
||||
width: 10%;
|
||||
margin-left: 12px;
|
||||
height: 42px;
|
||||
color: #ffffff;
|
||||
transition: box-shadow 1s ease-in, border 0.3s ease-in, background 2s ease-in;
|
||||
}
|
||||
.back:hover
|
||||
{
|
||||
border: 4px solid #ffffff;
|
||||
box-shadow: 0px 0px 50px #fff;
|
||||
background: rgb(0, 222, 0);
|
||||
}
|
||||
@ -36,8 +36,12 @@
|
||||
width: 10%;
|
||||
margin-left: 12px;
|
||||
height: 42px;
|
||||
color: #ffffff;
|
||||
transition: box-shadow 1s ease-in, border 0.3s ease-in, background 2s ease-in;
|
||||
}
|
||||
.back_text {
|
||||
margin-top: 7%;
|
||||
text-align: center;
|
||||
.back:hover
|
||||
{
|
||||
border: 4px solid #ffffff;
|
||||
box-shadow: 0px 0px 50px #fff;
|
||||
background: rgb(0, 222, 0);
|
||||
}
|
||||
@ -50,4 +50,12 @@ form {
|
||||
width: 90%;
|
||||
height: 90%;
|
||||
font-size: 1.2vw;
|
||||
}
|
||||
.apk {
|
||||
width: 40%;
|
||||
margin-left: 25%;
|
||||
margin-right: 30%;
|
||||
}
|
||||
.text_apk {
|
||||
text-align: center;
|
||||
}
|
||||
@ -49,4 +49,12 @@
|
||||
}
|
||||
.button_block {
|
||||
width: 35%;
|
||||
}
|
||||
.apk {
|
||||
width: 40%;
|
||||
margin-left: 30%;
|
||||
margin-right: 30%;
|
||||
}
|
||||
.text_apk {
|
||||
text-align: center;
|
||||
}
|
||||
@ -71,7 +71,8 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/diary/publications" class="nav-link py-3 border-bottom" title="Публикации" data-bs-toggle="tooltip"
|
||||
<a href="/diary/publications" class="nav-link py-3 border-bottom" title="Публикации"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="right">
|
||||
<svg class="bi" width="24" height="24" role="img" aria-label="Публикации">
|
||||
<use xlink:href="#posts"/>
|
||||
@ -88,12 +89,21 @@
|
||||
</li>
|
||||
<li>
|
||||
{% if current_user.is_authenticated %}
|
||||
<a href="/diary/profile" class="nav-link py-3 border-bottom" title="Профиль" data-bs-toggle="tooltip"
|
||||
data-bs-placement="right">
|
||||
<img class="user_img" src="../../{{ current_user.photo }}" width="40" height="40">
|
||||
<div class="btn-group dropend">
|
||||
<button type="button" class="btn btn-secondary dropdown-toggle user" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<img src="../../{{ current_user.photo }}" width="40" height="40"
|
||||
style="border-radius: 22px">
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" href="/">Главная</a></li>
|
||||
<li><a class="dropdown-item" href="/user/{{current_user.login}}">Профиль</a></li>
|
||||
<li><a class="dropdown-item" href="/safeappschool" aria-current="true">SafeAppSchool</a></li>
|
||||
<li><a class="dropdown-item btn btn-danger active" href="/logout">Выйти</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/diary/login" class="nav-link py-3 border-bottom" title="Профиль" data-bs-toggle="tooltip"
|
||||
<a href="/login?redir=diary" class="nav-link py-3 border-bottom" title="Профиль" data-bs-toggle="tooltip"
|
||||
data-bs-placement="right">
|
||||
<svg class="bi" width="24" height="24" role="img" aria-label="Профиль">
|
||||
<use xlink:href="#profil"/>
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
</h5>
|
||||
{% endif %}
|
||||
<div>
|
||||
<a href="/diary/edit_profile/{{current_user.login}}" type="submit" class="btn btn-primary"
|
||||
<a href="/user/{{current_user.login}}" type="submit" class="btn btn-primary"
|
||||
style="background-color:#38aaff; border-radius: 15px; margin:5%; width:90%">Редактировать профиль</a>
|
||||
<a style="border-radius: 15px; margin:5%; width:90%" href="/logout" class="btn btn-danger logout_btn">
|
||||
Выйти
|
||||
|
||||
@ -2,9 +2,7 @@
|
||||
{% extends "main/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="back">
|
||||
<a href="/"><p class="back_text" style="color: #ffffff">Назад</p></a>
|
||||
</div>
|
||||
<input type="button" class="back" onclick="history.back();" value="Назад"/>
|
||||
<div class="confirmation">
|
||||
<h1 class="header_title">Подтверждение почты</h1>
|
||||
<form action="" method="post">
|
||||
|
||||
@ -2,9 +2,7 @@
|
||||
{% extends "main/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="back">
|
||||
<a href="/"><p class="back_text" style="color: #ffffff">Назад</p></a>
|
||||
</div>
|
||||
<input type="button" class="back" onclick="history.back();" value="Назад"/>
|
||||
<div class="login">
|
||||
<h1 class="header_title">Авторизация</h1>
|
||||
<form action="" method="post">
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<div class="auth">
|
||||
{% if current_user.is_authenticated %}
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-secondary dropdown-toggle user" type="button" data-bs-toggle="dropdown"
|
||||
<button style="border-radius: 19px;border: 2px solid #ffffff;" class="btn btn-secondary dropdown-toggle user" type="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<img src="../../{{ current_user.photo }}" width="40" height="40"
|
||||
style="border-radius: 22px">
|
||||
|
||||
87
templates/main/profile.html
Normal file
87
templates/main/profile.html
Normal file
@ -0,0 +1,87 @@
|
||||
<link rel="stylesheet" href="../../static/css/main/profile.css">
|
||||
{% extends "main/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<input type="button" class="back" onclick="history.back();" value="Назад"/>
|
||||
<div class="profile">
|
||||
<div class="head">
|
||||
<img class="user_photo" src="../{{current_user.photo}}">
|
||||
<h2 class="user_name">{{current_user.name}}</h2>
|
||||
</div>
|
||||
<div class="body">
|
||||
<form class="row g-3" action="" method="POST" enctype="multipart/form-data">
|
||||
{{ form.hidden_tag() }}
|
||||
{{ form.csrf_token }}
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">{{ form.name.label }}</label>
|
||||
{{ form.name(class="form-control", type="text") }}
|
||||
{% for error in form.name.errors %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">{{ form.surname.label }}</label>
|
||||
{{ form.surname(class="form-control", type="text") }}
|
||||
{% for error in form.surname.errors %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{{ form.email.label }}</label>
|
||||
{{ form.email(class="form-control", type="email") }}
|
||||
{% for error in form.email.errors %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{{ form.birthday.label }}</label>
|
||||
{{ form.birthday(class="form-control", type="date") }}
|
||||
{% for error in form.birthday.errors %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label class="form-label">{{ form.about.label }}</label>
|
||||
{{ form.about(class="form-control", type="textarea") }}
|
||||
{% for error in form.about.errors %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="photo_buttons">
|
||||
{% if form.photo.data %}
|
||||
{{ form.del_photo(type="submit", class="btn btn-primary") }}
|
||||
{% for error in form.del_photo.errors %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{{ 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 %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="submit_button">
|
||||
<p>{{ form.submit2(type="submit", class="btn btn-primary", style="background-color:#38aaff") }}</p>
|
||||
{% if message != '' %}
|
||||
<div class="alert alert-danger" role="alert">{{ message }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@ -2,9 +2,7 @@
|
||||
{% extends "main/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="back">
|
||||
<a href="/"><p class="back_text" style="color: #ffffff">Назад</p></a>
|
||||
</div>
|
||||
<input type="button" class="back" onclick="history.back();" value="Назад"/>
|
||||
<div class="register">
|
||||
<h1 class="header_title">Регистрация</h1>
|
||||
<form action="" method="POST" enctype="multipart/form-data">
|
||||
|
||||
@ -44,5 +44,6 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
<div class="apk"><a href="../../static/apk/SafeAppSchool.apk"><p class="text_apk">Скачать приложение для Android</p></a></div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@ -7,6 +7,7 @@
|
||||
<img class="header_logo" src="../../static/img/maps.png" width="200">
|
||||
<h2 class="header_title">Здравствуйте, {{ current_user.name }}!</h2>
|
||||
</div>
|
||||
<div class="apk"><a href="../../static/apk/SafeAppSchool.apk"><p class="text_apk">Скачать приложение для Android</p></a></div>
|
||||
<div class="navigation">
|
||||
<div class="button_block">
|
||||
<a href="/safeappschool/go/school"><img class="button" src="../../static/img/school.png"></a>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user