Created
October 28, 2014 17:01
-
-
Save feniix/fc6e0efbf86aed620ba9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sqlite3 | |
from flask import Flask, request, session, g, redirect, url_for, \ | |
abort, render_template, flash | |
from contextlib import closing | |
DATABASE = '/tmp/defects.db' | |
DEBUG = True | |
SECRET_KEY = 'development key' | |
USERNAME = 'admin' | |
PASSWORD = 'default' | |
app = Flask(__name__) | |
app.config.from_object(__name__) | |
app.config.from_envvar('DEFECTS_SETTINGS', silent=True) | |
def connect_db(): | |
return sqlite3.connect(app.config['DATABASE']) | |
if __name__ == '__main__': | |
app.run() | |
def init_db(): | |
with closing(connect_db()) as db: | |
with app.open_resource('schema.sql', mode='r') as f: | |
db.cursor().executescript(f.read()) | |
db.commit() | |
@app.before_request | |
def before_request(): | |
g.db = connect_db() | |
@app.teardown_request | |
def teardown_request(exception): | |
db = getattr(g, 'db', None) | |
if db is not None: | |
db.close() | |
@app.route('/') | |
def show_entries(): | |
cur = g.db.execute('select title, text from entries order by id desc') | |
entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()] | |
return render_template('show_entries.html', entries=entries) | |
@app.route('/add', methods=['POST']) | |
def add_entry(): | |
if not session.get('logged_in'): | |
abort(401) | |
g.db.execute('insert into entries (title, text) values (?, ?)', | |
[request.form['title'], request.form['text']]) | |
g.db.commit() | |
flash('New entry was successfully posted') | |
return redirect(url_for('show_entries')) | |
@app.route('/login', methods=['GET', 'POST']) | |
def login(): | |
error = None | |
if request.method == 'POST': | |
if request.form['username'] != app.config['USERNAME']: | |
error = 'Invalid username' | |
elif request.form['password'] != app.config['PASSWORD']: | |
error = 'Infalid password' | |
else: | |
session['logged_in'] = True | |
flash('You were logged in') | |
return redirect(url_for('show_entries')) | |
return render_template('login.html', error=error) | |
@app.route('/logout') | |
def logout(): | |
session.pop('logged_in', None) | |
flash('You were logged out') | |
return redirect(url_for('show_entries')) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment