Update profile page with avatar

This commit is contained in:
Inga Kirschnick
2022-12-05 09:40:02 +01:00
parent 620d9d1ea2
commit be517a04af
10 changed files with 160 additions and 155 deletions

View File

@ -16,7 +16,7 @@ from app.models import User
from app.auth import USERNAME_REGEX
class EditProfileSettingsForm(FlaskForm):
user_avatar = FileField(
avatar = FileField(
'Image File'
)
email = StringField(

View File

@ -1,51 +1,58 @@
from flask import flash, redirect, render_template, url_for
from flask import (
abort,
flash,
Markup,
redirect,
render_template,
send_from_directory,
url_for
)
from flask_login import current_user, login_required
import os
from app import db
from app.models import User
from app.models import Avatar
from . import bp
from .forms import (
EditProfileSettingsForm
)
@bp.route('')
@bp.before_request
@login_required
def profile():
user_image = 'static/images/user_avatar.png'
user_name = current_user.username
last_seen = f'{current_user.last_seen.strftime("%Y-%m-%d %H:%M")}'
location = 'Bielefeld'
about_me = '''Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimat'''
full_name = 'Inga Kirschnick'
email = current_user.email
website = 'https://nopaque.uni-bielefeld.de'
organization = 'Universität Bielefeld'
member_since = f'{current_user.member_since.strftime("%Y-%m-%d")}'
return render_template('profile/profile_page.html.j2',
user_image=user_image,
user_name=user_name,
last_seen=last_seen,
location=location,
about_me=about_me,
full_name=full_name,
email=email,
website=website,
organization=organization,
member_since=member_since)
def before_request():
pass
@bp.route('/edit')
@login_required
@bp.route('')
def profile():
return render_template('profile/profile_page.html.j2',
user=current_user)
@bp.route('/avatars/<hashid:avatar_id>')
def avatar_download(avatar_id):
avatar_file = Avatar.query.get_or_404(avatar_id)
if not (avatar_file and avatar_file.filename):
abort(404)
return send_from_directory(
os.path.dirname(avatar_file.path),
os.path.basename(avatar_file.path),
as_attachment=True,
attachment_filename=avatar_file.filename,
mimetype=avatar_file.mimetype
)
@bp.route('/edit-profile', methods=['GET', 'POST'])
def edit_profile():
edit_profile_settings_form = EditProfileSettingsForm(
edit_profile_settings_form = EditProfileSettingsForm(
current_user,
data=current_user.to_json_serializeable(),
prefix='edit-profile-settings-form'
)
if (edit_profile_settings_form.submit.data
and edit_profile_settings_form.validate()):
)
if edit_profile_settings_form.validate_on_submit():
if edit_profile_settings_form.avatar.data:
try:
Avatar.create(edit_profile_settings_form.avatar.data, user=current_user)
except (AttributeError, OSError):
abort(500)
current_user.email = edit_profile_settings_form.email.data
current_user.username = edit_profile_settings_form.username.data
current_user.about_me = edit_profile_settings_form.about_me.data
@ -54,8 +61,9 @@ def edit_profile():
current_user.website = edit_profile_settings_form.website.data
current_user.full_name = edit_profile_settings_form.full_name.data
db.session.commit()
flash('Your changes have been saved')
return redirect(url_for('.profile.edit_profile'))
return render_template('profile/edit_profile.html.j2',
edit_profile_settings_form=edit_profile_settings_form,
title='Edit Profile')
message = Markup(f'Profile settings updated')
flash(message, 'success')
return redirect(url_for('.profile'))
return render_template('profile/edit_profile.html.j2',
edit_profile_settings_form=edit_profile_settings_form,
title='Edit Profile')