# -*- coding: utf-8 -*- import sqlite3 #all the imports from flask import Flask, request, session, g, redirect, url_for, render_template from flask import flash from functools import wraps from collections import defaultdict from flask.ext.babel import Babel, gettext, refresh app = Flask(__name__) app.config.from_envvar('CONF') babel = Babel(app) @babel.localeselector def get_locale(): locale = session.get('lang', None) if locale is not None: return locale return request.accept_languages.best_match(['en', 'fr', 'sr']) def query_db(query, args=(), one=False): cur = get_db().execute(query, args) rv = cur.fetchone() if one else cur.fetchall() cur.close() return rv def connect_db(): conn = sqlite3.connect(app.config['DATABASE'], detect_types=sqlite3.PARSE_DECLTYPES) conn.row_factory = sqlite3.Row return conn def get_db(): db = getattr(g, 'sqlite_db', None) if db is None: db = g.sqlite_db = connect_db() return db @app.teardown_appcontext def close_db(error): """Closes the database again at the end of the request.""" db = getattr(g, 'sqlite_db', None) if db: db.close() def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if 'user_name' not in session: return redirect(url_for('login', next=request.url)) return f(*args, **kwargs) return decorated_function @app.route('/getting/') def getting_there(): return render_template("getting.html") @app.route('/gifts/') def gifts(): return render_template("gifts.html") @app.route('/lodging/') def lodging(): return render_template("lodging.html") @app.route('/rsvp/', methods=['GET', 'POST']) def rsvp(): if request.method == 'GET': r = query_db("SELECT * from guests where user_name=?", (session["user_name"],), one=True) return render_template("rsvp.html", form=r) if request.method == 'POST': db = get_db() update_string = [] args = [] for k, v in request.form.items(): update_string.append("{0}=?".format(k)) if k in ["rsvp", "plusone", "kids"]: ## convert to integer args.append(int(v)) else: args.append(v) update_string = ",".join(update_string) query = "UPDATE guests set {0} , lastupdate=current_timestamp " \ "WHERE user_name=?".format(update_string) with db: db.execute(query, tuple(args+[session['user_name']])) flash(gettext("We have updated your information!")) return redirect(url_for('rsvp')) @app.route('/') @app.route('/home/') @login_required def main_page(): return render_template("main.html") @app.route('/login/', methods=['GET', 'POST']) def login(): if 'user_name' in session: return redirect(url_for('main_page')) error = None if request.method == 'POST': session['lang'] = request.form['language'] refresh() db = get_db() with db: c = db.execute("SELECT * from guests where user_name=?", (request.form['username'],)) if not c.fetchone(): flash(gettext("Wrong name")) return redirect(url_for('login')) if request.form['password'] != app.config['PASSWORD']: flash(gettext("Wrong password")) return redirect(url_for('login')) session['user_name'] = request.form['username'] return redirect(url_for('main_page')) return render_template('login.html') if __name__=="__main__": app.run()