This commit is contained in:
2025-09-27 20:49:58 +02:00
commit 767fb638ce
58 changed files with 6724 additions and 0 deletions

66
routes/profile.py Normal file
View File

@@ -0,0 +1,66 @@
from flask import Blueprint, render_template, redirect, url_for, flash, request
from flask_login import login_required, current_user
from models import db, User, Post
from flask_babel import gettext as _
from werkzeug.security import generate_password_hash
import re
profile_bp = Blueprint('profil', __name__)
@profile_bp.route('/profile')
@login_required
def profile():
return render_template('profile.html', user=current_user)
@profile_bp.route('/my_posts')
@login_required
def my_posts():
posts = db.session.query(Post).filter_by(user_id=current_user.id).order_by(Post.created_at.desc()).all()
return render_template('my_posts.html', posts=posts)
@profile_bp.route('/edit_profile', methods=['GET', 'POST'])
@login_required
def edit_profile():
if request.method == 'POST':
new_username = request.form['username']
new_email = request.form['email']
new_password = request.form['password']
confirm_password = request.form['confirm_password']
if not current_user.username or not current_user.email:
flash(_('Username and email cannot be empty.'), 'danger')
return redirect(url_for('profile.edit_profile'))
else:
if new_username and new_username != current_user.username:
if db.session.query(User).filter_by(username=new_username).first():
flash(_('Username already taken.'), 'danger')
return redirect(url_for('profile.edit_profile'))
elif not re.match(r'^[a-zA-Z0-9_.+-]+$', new_username):
flash(_('Invalid username. Only alphanumeric characters are allowed.'), 'danger')
return redirect(url_for('profile.edit_profile'))
else:
current_user.username = new_username
elif new_email and new_email != current_user.email:
if not re.match(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', new_email):
flash(_('Invalid email address.'), 'danger')
return redirect(url_for('profile.edit_profile'))
elif db.session.query(User).filter_by(email=new_email).first():
flash(_('E-Mail already taken.'), 'danger')
return redirect(url_for('profile.edit_profile'))
else:
current_user.email = new_email
elif new_password:
if len(new_password) < 8:
flash(_('Password must be at least 8 characters long.'), 'danger')
return redirect(url_for('profile.edit_profile'))
elif new_password != confirm_password:
flash(_('Passwords do not match.'), 'danger')
return redirect(url_for('profile.edit_profile'))
else:
current_user.password = generate_password_hash(new_password, method='pbkdf2:sha256')
else:
flash(_('No changes made.'), 'info')
return redirect(url_for('profil.profile'))
db.session.commit()
flash(_('Profile updated.'), 'success')
return redirect(url_for('profil.profile'))
return render_template('edit_profile.html', user=current_user)