flask上,实现简单博客3
flask下,实现简单博客3
flask下,实现简单博客2
所有视图(views.py完整代码):
# -*- coding: utf-8 -*-"""Flaskr~~~~~~A microblog example application written as Flask tutorial withFlask and sqlite3.:copyright: (c) 2010 by Armin Ronacher.:license: BSD, see LICENSE for more details."""from __future__ import with_statementfrom sqlite3 import dbapi2 as sqlite3from flask import Flask, request, session, g, redirect, url_for, abort, \render_template, flash, _app_ctx_stack# 创建数据库DATABASE = 'blog.db' DEBUG = True SECRET_KEY = 'development key' USERNAME = 'admin' PASSWORD = '123'#初始化环境# create our little application :)app = Flask(__name__)app.config.from_object(__name__)app.config.from_envvar('FLASKR_SETTINGS', silent=True)#初始化数据库def init_db():"""Creates the database tables."""with app.app_context():db = get_db()with app.open_resource('schema.sql') as f:db.cursor().executescript(f.read())db.commit()def get_db():"""Opens a new database connection if there is none yet for thecurrent application context."""top = _app_ctx_stack.topif not hasattr(top, 'sqlite_db'):sqlite_db = sqlite3.connect(app.config['DATABASE'])sqlite_db.row_factory = sqlite3.Rowtop.sqlite_db = sqlite_dbreturn top.sqlite_db@app.teardown_appcontextdef close_db_connection(exception):"""Closes the database again at the end of the request."""top = _app_ctx_stack.topif hasattr(top, 'sqlite_db'):top.sqlite_db.close()@app.route('/')def show_entries():db = get_db()cur = db.execute('select title, text from entries order by id desc')entries = 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)db = get_db()db.execute('insert into entries (title, text) values (?, ?)',[request.form['title'], request.form['text']])db.commit()flash('New entry was successfully posted')return redirect(url_for('show_entries'))@app.route('/login', methods=['GET', 'POST'])def login():error = Noneif request.method == 'POST':if request.form['username'] != app.config['USERNAME']:error = 'Invalid username'elif request.form['password'] != app.config['PASSWORD']:error = 'Invalid password'else:session['logged_in'] = Trueflash('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'))if __name__ == '__main__':init_db()app.run()