from flask import Flask, render_template, make_response, request, redirect, url_for app = Flask(__name__) import cs304dbi_sqlite3 as dbi def recent_entries(conn,limit=10): '''Returns the most recent 'limit' entries from the blog''' curs = dbi.dict_cursor(conn) curs.execute('''SELECT entered as time,user,entry FROM blog_entry ORDER BY entered DESC LIMIT ?''',[limit]) return curs.fetchall() @app.route('/') def index(): ## DONE: get bloguser value from cookie bloguser = request.cookies.get('bloguser') or '' conn = dbi.connect() entries = recent_entries(conn) return render_template('blog.html', allCookies=request.cookies, bloguser=bloguser, rows=entries) @app.route('/post_comment/', methods=['POST']) def post_comment(): ## DONE: get bloguser value from cookie bloguser = request.cookies.get('bloguser') if ('comment' in request.form): if 'blogname' in request.form: user=request.form['blogname'] else: user=bloguser entry = request.form['comment'] conn = dbi.connect() curs = dbi.cursor(conn) # a tuple cursor curs.execute('''INSERT INTO blog_entry(entered,user,entry) VALUES (CURRENT_TIMESTAMP,?,?)''', [user,entry]) conn.commit() # don't forget to commit! return redirect(url_for('index')) else: return render_template('go_home.html', msg='comment form missing comment input') @app.route('/login/', methods=['POST']) def login(): if ('loginname' in request.form and 'loginpass' in request.form): conn = dbi.connect() curs = dbi.cursor(conn) curs.execute('''SELECT count(*) FROM blog_user WHERE user=? AND pass=?''', (request.form['loginname'], request.form['loginpass'])) row = curs.fetchone() # remember, we are using a tuple cursor this time if row[0] == 1: bloguser=request.form.get('loginname') ## DONE: make a response object and set the cookie resp = make_response(render_template('go_home.html', allCookies=request.cookies, msg='logged in as '+bloguser)) resp.set_cookie('bloguser',bloguser) return resp else: errmsg = 'incorrect login' # we are not using flash, otherwise we would definitely do this # flash(errmsg) # instead, we use a message return render_template('go_home.html', allCookies=request.cookies, msg=errmsg) @app.route('/logout/', methods=['POST']) def logout(): ## DONE: make a response, saying they are logged out, ## expire the cookie and return the response object resp = make_response(render_template('go_home.html', allCookies=request.cookies, msg='logged out')) resp.set_cookie('bloguser', '', expires=0) return resp if __name__ == '__main__': dbi.cache_cnf() dbi.use('blog') conn=dbi.connect() entries=recent_entries(conn) for e in entries: print(e) import sys,os if len(sys.argv) > 1: # arg, if any, is the desired port number port = int(sys.argv[1]) assert(port>1024) else: port = os.getuid() app.debug = True app.run('0.0.0.0',port)