Skip to content

Commit 89d0126

Browse files
committed
Update microblog.py
1 parent 8fa8608 commit 89d0126

File tree

1 file changed

+52
-30
lines changed

1 file changed

+52
-30
lines changed

assignments/session05/microblog/microblog.py

Lines changed: 52 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,66 +5,88 @@
55
from flask import request
66
from flask import url_for
77
from flask import redirect
8-
import sqlite3
8+
from flask import session
9+
from flask import flash
10+
911
from contextlib import closing
1012

13+
import sqlite3
14+
1115
app = Flask(__name__)
1216

1317
app.config.from_pyfile('microblog.cfg')
1418

15-
1619
def connect_db():
17-
return sqlite3.connect(app.config['DATABASE'])
18-
20+
return sqlite3.connect(app.config['DATABASE'])
1921

2022
def 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-
23+
with closing(connect_db()) as db:
24+
with app.open_resource('schema.sql') as f:
25+
db.cursor().executescript(f.read())
26+
db.commit()
2627

2728
def get_database_connection():
28-
db = getattr(g, 'db', None)
29-
if db is None:
30-
g.db = db = connect_db()
31-
return db
32-
29+
db = getattr(g, 'db', None)
30+
if db is None:
31+
g.db = db = connect_db()
32+
return db
3333

3434
@app.teardown_request
3535
def teardown_request(exception):
36-
db = getattr(g, 'db', None)
37-
if db is not None:
38-
db.close()
39-
36+
db = getattr(g, 'db', None)
37+
if db is not None:
38+
db.close()
4039

4140
def write_entry(title, text):
4241
con = get_database_connection()
4342
con.execute('insert into entries (title, text) values (?, ?)',
44-
[title, text])
43+
[title, text])
4544
con.commit()
4645

47-
4846
def get_all_entries():
4947
con = get_database_connection()
5048
cur = con.execute('SELECT title, text FROM entries ORDER BY id DESC')
5149
return [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
5250

53-
5451
@app.route('/')
5552
def show_entries():
56-
entries = get_all_entries()
57-
return render_template('show_entries.html', entries=entries)
58-
53+
entries = get_all_entries()
54+
return render_template('show_entries.html', entries = entries)
5955

6056
@app.route('/add', methods=['POST'])
6157
def add_entry():
62-
try:
63-
write_entry(request.form['title'], request.form['text'])
64-
except sqlite3.Error:
65-
abort(500)
66-
return redirect(url_for('show_entries'))
67-
58+
if not session.get('logged_in'):
59+
abort(401)
60+
elif not request.form['title'] or not request.form['text']:
61+
flash('Please enter a title and an entry.')
62+
else:
63+
try:
64+
write_entry(request.form['title'], request.form['text'])
65+
flash('New entry posted!')
66+
except sqlite3.Error as e:
67+
flash('Your entry was NOT created! Error message: %s' % str(e))
68+
return redirect(url_for('show_entries'))
69+
70+
71+
@app.route('/login', methods=['GET', 'POST'])
72+
def login():
73+
error = None
74+
if request.method == 'POST':
75+
if request.form['username'] != app.config['USERNAME']:
76+
error = 'Invalid username'
77+
elif request.form['password'] != app.config['PASSWORD']:
78+
error = 'Invalid password'
79+
else:
80+
session['logged_in'] = True
81+
flash('You are logged in')
82+
return redirect(url_for('show_entries'))
83+
return render_template('login.html', error=error)
84+
85+
@app.route('/logout')
86+
def logout():
87+
session.pop('logged_in', None)
88+
flash('You have logged out')
89+
return redirect(url_for('show_entries'))
6890

6991
if __name__ == '__main__':
7092
app.run(debug=True)

0 commit comments

Comments
 (0)