#flask学习笔记-08:留言板(一)

Step 1: 目录结构

/flaskr
    /static
    /templates

Step 2: 创建配置文件

创建flaskr/config.py文件,配置相关的参数。

# configuration
DATABASE = '/tmp/flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = '123456'

配置依次是:
1.数据库文件位置
2.是否开启debug模式
3.session安全连接
4.用户名
5.密码

调用config.py配置文件,创建flaskr.py,添入以下代码。

import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash

app = Flask(__name__)
app.config.from_object('config')

Step 3: 创建数据库文件

flaskr/ 目录下编辑 schema.sql

drop table if exists entries;
create table entries (
  id integer primary key autoincrement,
  title string not null,
  text string not null
);

创建一个叫 entries 的单表,在这个表中每行包含一个 id ,一个 title 和一个 textid 是一个自增的整数而且是主键,其余两个为非空的字符串。

这里创建数据库有两种方法,一种是直接通过sqlite3命令来创建。

sqlite3 /tmp/flaskr.db < schema.sql

如果没有sqlite3这个命令,可以直接添加一个函数来初始化数据库。

from contextlib import closing

def connect_db():                                                                           
    return sqlite3.connect(app.config['DATABASE'])

def init_db():
    with closing(connect_db()) as db:        
        with app.open_resource('schema.sql') as f:          
            db.cursor().executescript(f.read())
        db.commit()

进入python shell

$python
Python 2.7.9 (default, Feb 11 2015, 15:08:29) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from flaskr import init_db
>>> init_db()
>>> 

验证数据库是否创建成功

$ll /tmp/flaskr.db 
-rw-r--r--. 1 root root 3072 Apr 26 02:02 /tmp/flaskr.db

Step 4: 请求数据库连接

init_db() 函数下加入以下代码

@app.before_request
def before_request():
    g.db = connect_db()

@app.teardown_request
def teardown_request(exception):
    g.db.close()

before_request 在请求收到之前绑定一个函数做一些事情。
after_request 每一个请求之后绑定一个函数,如果请求没有异常。
teardown_request 每一个请求之后绑定一个函数,即使遇到了异常。
before_request 的时候创建一个 db 连接,然后 teardown_request 的时候断开这个连接。

我们把数据库连接保存在 Flask 提供的特殊的 g 对象中。这个对象与 每一个请求是一一对应的,并且只在函数内部有效。不要在其它对象中储存类似信息, 因为在多线程环境下无效。这个特殊的 g 对象会在后台神奇的工作,保证系统正常运行。

以上完整的代码:

#!/root/.pyenv/versions/app/bin/python
import sqlite3
from contextlib import closing
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash

app = Flask(__name__)
app.config.from_object('config')


def connect_db():
    return sqlite3.connect(app.config['DATABASE'])

def init_db():
    with closing(connect_db()) as db:
        with app.open_resource('schema.sql') 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):
    g.db.close()

现在还不能运行噢~!

posted @ 2015-05-04 14:07 小米飞猫 阅读(...) 评论(...) 编辑 收藏