|
| 1 | +import sqlite3 |
| 2 | +from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash |
| 3 | +from contextlib import closing |
| 4 | +import time |
| 5 | + |
| 6 | +DATABASE = 'guestbook.db' |
| 7 | +DEBUG = True |
| 8 | +SECRET_KEY = 'development key' |
| 9 | + |
| 10 | +app = Flask(__name__) |
| 11 | +app.config.from_object(__name__) |
| 12 | + |
| 13 | +def connect_db(): |
| 14 | + return sqlite3.connect(app.config['DATABASE']) |
| 15 | + |
| 16 | +def init_db(): |
| 17 | + with closing(connect_db()) as db: |
| 18 | + with app.open_resource('schema.sql', mode='r') as f: |
| 19 | + db.cursor().executescript(f.read()) |
| 20 | + db.commit() |
| 21 | + |
| 22 | +@app.before_request |
| 23 | +def before_request(): |
| 24 | + g.db = connect_db() |
| 25 | + |
| 26 | +@app.teardown_request |
| 27 | +def teardown_request(exception): |
| 28 | + db = getattr(g, 'db', None) |
| 29 | + if db is not None: |
| 30 | + db.close() |
| 31 | + g.db.close() |
| 32 | + |
| 33 | + |
| 34 | +@app.route('/') |
| 35 | +def show_entires(): |
| 36 | + cur = g.db.execute('select name,text,time from entries order by id desc') |
| 37 | + entries = [dict(name=row[0], text=row[1], time=row[2]) for row in cur.fetchall()] |
| 38 | + for i in entries: |
| 39 | + print i |
| 40 | + return render_template('show_entries.html', entries=entries) |
| 41 | + |
| 42 | +@app.route('/add', methods=['POST']) |
| 43 | +def add_entry(): |
| 44 | + if not session.get('logged_in'): |
| 45 | + abort(401) |
| 46 | + current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) |
| 47 | + g.db.execute('insert into entries (name, text, time) values (?, ?, ?)', |
| 48 | + [request.form['name'], request.form['text'], current_time]) |
| 49 | + g.db.commit() |
| 50 | + flash('New entry was successfully posted') |
| 51 | + return redirect(url_for('show_entires')) |
| 52 | + |
| 53 | +@app.route('/login', methods=['GET', 'POST']) |
| 54 | +def login(): |
| 55 | + error = None |
| 56 | + if request.method == 'POST': |
| 57 | + if request.form['username'] is None: |
| 58 | + error = "Invalid username" |
| 59 | + else: |
| 60 | + session['logged_in'] = True |
| 61 | + session['name'] = request.form['username'] |
| 62 | + flash('You were logged in') |
| 63 | + return redirect(url_for('show_entires')) |
| 64 | + return render_template('login.html', error=error) |
| 65 | + |
| 66 | +@app.route('/logout') |
| 67 | +def logout(): |
| 68 | + session.pop('logged_in', None) |
| 69 | + flash('You were logged out') |
| 70 | + return redirect(url_for('show_entires')) |
| 71 | + |
| 72 | + |
| 73 | + |
| 74 | +if __name__ == "__main__": |
| 75 | + app.run() |
0 commit comments