view frontend/mfrontend/views/frontend.py @ 25:3a26da290650

merge
author Michał Rudowicz <michal.rudowicz@fl9.eu>
date Mon, 09 May 2011 10:49:01 +0200
parents c87f82a15606
children
line wrap: on
line source

#!/usr/bin/python
# -*- coding: utf-8 -*-

from flask import Module, render_template, request, url_for
from flask import escape, session, redirect, flash, abort, g
from mfrontend import db, utils, exceptions
frontend = Module(__name__)

@frontend.route('/')
def index():
    """ Funkcja wyświetlająca stronę główną aplikacji.
    """
    return render_template('hello.html')

@frontend.route('/install/')
def install():
    """Instaluje aplikację, tworząc pustą bazę danych
       według schematu.
    """
    if db.init_db():
        return render_template('install_ok.html')
    else:
        abort(404)

@frontend.route('/login/', methods=['GET', 'POST'])
def login():
    """ Funkcja logująca użytkownika w wypadku, gdy za pomocą
        metody POST zostały wysłane dane do logowania, a w
        przeciwnym wypadku wyświetlająca formularz logowania.
    """
    if request.method == 'POST':
        try:
            if db.user_can_login(request.form['username'],
                                 request.form['password']) :
                session['user_id'] = db.get_user_id(request.form['username'])
                session['user_name'] = request.form['username']
                session['logged_in'] = True
                flash(u'Zalogowano')
                return redirect(url_for('index'))
            else:
                raise exceptions.BadPasswordOrUsername()
        except (exceptions.UserNotActivated,
                exceptions.BadPasswordOrUsername) as e:
            flash(e)
            return redirect(url_for('index'))
    return render_template('login.html')

@frontend.route('/logout/')
def logout():
    """Funkcja powoduje wyczyszczenie sesji użytkownika,
       a w efekcie wylogowanie z systemu.
    """
    session.clear()
    g.user = None
    flash('Wylogowano')
    return redirect(url_for('index'))

@frontend.route('/register/', methods=['GET', 'POST'])
def register():
    """Funkcja do rejestrowania użytkowników."""
    if request.method == 'POST':
        try:
            db.register_user(request.form['username'],
                            request.form['password'])
            flash(u'Konto założone, poczekaj na akceptację administratora.')
            return redirect(url_for('index'))
        except exceptions.UserExists as e:
            flash(e)
            return redirect(url_for('register'))
    return render_template('register.html')