| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | 
"""Backend"""from flask_login import login_required, login_user, logout_userfrom flask_menu import Menu, register_menufrom flask import render_template, request, redirect, url_for, flash, Blueprint, abortfrom jinja2 import TemplateNotFoundfrom app import app, login_manager, dbfrom app.models import UserBLUEPRINT = Blueprint(    'backend',    __name__,    template_folder='templates')@BLUEPRINT.route("/login", methods=["GET", "POST"])def login():    """Handle login page and data"""    if request.method == 'POST':        email = request.form['email']        password = request.form['password']        user = User.query.filter(User.email == email).first()        if user is not None:            if user.check_password(password):                login_user(user, remember=True)                flash('You were successfully logged in.', 'success')                if request.args.get("next") is not None:                    return redirect(request.args.get("next"))                return redirect(url_for('index'))            else:                flash('Incorrect password.', 'danger')        else:            flash('User not found.', 'danger')        return redirect(url_for('login'))    else:        return render_template('user/login.j2')@BLUEPRINT.route("/register", methods=["POST"])def register():    """Register a new user"""    if request.method != "POST":        return redirect(url_for('login'))    if "name" not in request.form or not request.form['name']:        flash('Fill in the name.', 'warning')        return render_template('user/login.j2')    if "email" not in request.form or not request.form['email']:        flash('Fill in the email.', 'warning')        return render_template('user/login.j2', name=request.form['name'])    if "password" not in request.form or not request.form['password']:        flash('Fill in the password.', 'warning')        return render_template(            'user/login.j2',            name=request.form['name'],            email=request.form['email']        )    user = User.query.filter(User.name == request.form['name']).first()    if user is None:        flash('Name not found.', 'warning')        return render_template(            'user/login.j2',            name=request.form['name'],            email=request.form['email']        )    if user.email is not None:        flash('User already taken.', 'warning')        return render_template(            'user/login.j2',            name=request.form['name'],            email=request.form['email']        )    user.email = request.form['email']    user.password = request.form['password']    db.session.commit()    login_user(user, remember=True)    flash('Succesfully registered account "%s".' % (user.name), 'success')    if request.args.get("next") is not None:        return redirect(request.args.get("next"))    else:        return redirect(url_for('index'))@BLUEPRINT.route("/logout")@login_requireddef logout():    """Logout function for users"""    logout_user()    flash('succesfully logged out.', 'success')    return redirect(url_for('login'))@BLUEPRINT.route('/')@register_menu(BLUEPRINT, '.', 'Home')def index():    """Show homepage"""    return render_template('site/index.j2')
 |