· 7 years ago · Jul 26, 2018, 12:40 AM
1#all the imports
2import sqlite3
3from flask import Flask, request,session, g, redirect, url_for, abort, render_template, flash
4from contextlib import closing
5
6#configuration
7DATABASE= 'tmp/flaskr.db'
8DEBUG= True
9SECRET_KEY= 'development key' ##more difficult
10USERNAME= 'admin'
11PASSWORD= 'admin'
12
13#application
14app= Flask(__name__)
15app.config.from_object(__name__)
16
17def connect_db():
18 return sqlite3.connect(app.config['DATABASE'])
19
20def init_db():
21 with closing(connect_db()) as db:
22 with app.open_resource('schema.sql') as f:
23 db.cursor().executescript(f.read())
24 db.commit()
25
26@app.before_request()
27def before_request():
28 g.db= connect_db()
29
30@app.after_request()
31def after_request():
32 g.db.close()
33 return response
34
35@app.route('/')
36def show_entries():
37 cur = g.db.execute('select.title, text from entries order by desc')
38 entries= [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
39 return render_template('show_entries.html', entries=entries)
40
41@app.route('/add', methods=['POST'])
42def add_entry():
43 if not session.get('logged in'):
44 abort(401)
45 g.db.execute('insert into entries (title,text) values(?, ?)',
46 [request.form['title'],
47 request.form['text']])
48 g.db.commit()
49 flash('New entry was successfully posted')
50 return redirect(url_for('show_entries'))
51
52@app.route('/login', methods=['GET', 'POST'])
53def login():
54 error= None
55 if request.method== 'POST':
56 if request.form['username']!=app.config['USERNAME']:
57 error='Invalid username'
58
59 elif request.form['password']!=app.config['PASSWORD']:
60 error='Invalid password'
61
62 else:
63 session['logged_in']=True
64 flash('You were logged in')
65 return redirect(url_for('show_entries'))
66 return render_template('login.html', error=error)
67
68@app.route('/logout')
69def logout():
70 session.pop('logged_in', None)
71 flash('You were logged out')
72 return redirect(url_for('show_entries')
73
74if __name__ == '__main__':
75 app.run()