在我们真正开始之前,让我们创建这个应用所需的文件夹:
/flaskr
/static
/templates
flaskr 文件夹不是一个 Python 包,只是个我们放置文件的地方。在接下来的步骤中,我们会直接把数据库模式和主模块放在这个目录中。 用户可以通过 HTTP 访问 static 文件夹中的文件,也即存放 css 和 javascript 文件的地方。Flask 会在 templates 文件夹里寻找 Jinja2 模板,之后教程中创建的模板将会放在这个文件夹里。
1、数据库模式
首先我们要创建数据库模式。对于这个应用来说,一张表就足够了,而且只需支持 SQLite,所以会很简单。只需要把下面的内容放进一个名为 schema.sql 的文件,放在刚才创建的 flaskr 文件夹中:
drop table if exists entries;
create table entries (
id integer primary key autoincrement,
title string not null,
text string not null
);
这个模式包含一个名为 entries 的表,该表中的每行都包含一个 id 、一个 title 和一个 text 。 id 是一个自增的整数,也是主键;其余的两个是字符串,且不允许为空。
2、数据库管理
2.1、调用init_db函数初始化数据库,建立一个entries空表。
#Flask 提供了两种环境(Context):应用环境(Application Context)和请求环境(Request Context)。
# 暂且你所需了解的是,不同环境有不同的特殊变量。
# 例如 request 变量与当前请求的请求对象有关,
# 而 g 是与当前应用环境有关的通用变量。
def connect_db():
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
#这个函数首次调用的时候会为当前环境创建一个数据库连接,调用成功后返回已经建立好的连接:
def get_db():
if not hasattr(g,'sqlite_db'):
g.sqlite_db = connect_db()
return g.sqlite_db
#初始化数据库
def init_db():
# 建立了应用环境,在 with 语句的内部, g 对象会与 app 关联。
# 在语句的结束处,会释放这个关联并执行所有销毁函数。
# 这意味着数据库连接在提交后断开。
with app.app_context():
db = get_db()
#可以打开应用提供的资源。这个函数从资源所在位置( 你的 flaskr 文件夹)打开文件,并允许你读取它。我们在此用它来在数据库连接上执行脚本。
with app.open_resource('schema.sql',mode='r') as f:
db.cursor().executescript(f.read())
db.commit()
其中配置连接参数的方法有三种
法1:
app = Flask(__name__)
# app.config['DATABASE'] = ":memory:"
app.config['DATABASE'] = "sqlite.db"
app.config['DEBUG'] = True
app.config['USERNAME'] = '1'
app.config['PASSWORD'] = '1'