現(xiàn)在我們已經(jīng)有了數(shù)據(jù)庫(kù)模式,我們可以創(chuàng)建應(yīng)用的模塊了。讓我們把它 叫做 flaskr.py ,并放置在 flaskr 目錄下。我們從添加所需的導(dǎo) 入語(yǔ)句和添加配置部分開始。對(duì)于小型應(yīng)用,可以直接把配置放在主模塊 里,正如我們現(xiàn)在要做的一樣。但更簡(jiǎn)潔的方案是創(chuàng)建獨(dú)立的 .ini.py 文件,并載入或?qū)肜锩娴闹怠?/p>

首先在 flaskr.py 里導(dǎo)入:

# all the imports
import os
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, \
     render_template, flash

Config 對(duì)象的用法如同字典,所以我們可以用新值更新 它。

數(shù)據(jù)庫(kù)路徑

操作系統(tǒng)有進(jìn)程當(dāng)前工作目錄的概念。不幸的是,你在 Web 應(yīng)用中不能 依賴此概念,因?yàn)槟憧赡軙?huì)在相同的進(jìn)程中運(yùn)行多個(gè)應(yīng)用。

為此,提供了 app.root_path 屬性以獲取應(yīng)用的路徑。配合 os.path 模塊使用,輕松可達(dá)任意文件。在本例中,我們把數(shù)據(jù)庫(kù) 放在根目錄下。

對(duì)于實(shí)際生產(chǎn)環(huán)境的應(yīng)用,推薦使用 實(shí)例文件夾 。

通常,加載一個(gè)單獨(dú)的、環(huán)境特定的配置文件是個(gè)好主意。Flask 允許你導(dǎo) 入多份配置,并且使用最后的導(dǎo)入中定義的設(shè)置。這使得配置設(shè)定過(guò)程更可 靠。 from_envvar() 可用于達(dá)此目的。

app.config.from_envvar(‘FLASKR_SETTINGS’, silent=True)

只需設(shè)置一個(gè)名為 FLASKR_SETTINGS 的環(huán)境變量,指向要加載的 配置文件。啟用靜默模式告訴 Flask 在沒(méi)有設(shè)置該環(huán)境變量的情況下噤聲。

此外,你可以使用配置對(duì)象上的 from_object() 方 法,并傳遞一個(gè)模塊的導(dǎo)入名作為參數(shù)。Flask 會(huì)從這個(gè)模塊初始化變量。 注意,只有名稱全為大寫字母的變量才會(huì)被采用。

secret_key 是保證客戶端會(huì)話的安全的要點(diǎn)。正確選擇一個(gè)盡可能難猜 測(cè)、盡可能復(fù)雜的密鑰。調(diào)試標(biāo)志關(guān)系交互式調(diào)試器的開啟。 永遠(yuǎn)不要在生產(chǎn)系統(tǒng)中激活調(diào)試模式 ,因?yàn)樗鼘⒃试S用戶在服務(wù)器上執(zhí) 行代碼。

我們還添加了一個(gè)讓連接到指定數(shù)據(jù)庫(kù)變得很簡(jiǎn)單的方法,這個(gè)方法用于 在請(qǐng)求時(shí)開啟一個(gè)數(shù)據(jù)庫(kù)連接,并且在交互式 Python shell 和腳本中 也能使用。這為以后的操作提供了相當(dāng)?shù)谋憷?。我們?chuàng)建了一個(gè)簡(jiǎn)單的 SQLite 數(shù)據(jù)庫(kù)的連接,并讓它用 sqlite3.Row 表示數(shù)據(jù)庫(kù)中 的行。這使得我們可以通過(guò)字典而不是元組的形式訪問(wèn)行:

def connect_db():
    """Connects to the specific database."""
    rv = sqlite3.connect(app.config['DATABASE'])
    rv.row_factory = sqlite3.Row
    return rv

最后,如果我們想要把這個(gè)文件當(dāng)做獨(dú)立應(yīng)用來(lái)運(yùn)行,我們只需在可啟動(dòng) 服務(wù)器文件的末尾添加這一行:

if __name__ == '__main__':
    app.run()

如此我們便可以開始順利運(yùn)行這個(gè)應(yīng)用,使用如下命令:

python flaskr.py

你將會(huì)看見有消息告訴你訪問(wèn)該服務(wù)器的地址。

當(dāng)你在瀏覽器中訪問(wèn)服務(wù)器遇到一個(gè) 404 page not found 錯(cuò)誤時(shí), 是因?yàn)槲覀冞€沒(méi)有任何視圖。我們之后再來(lái)關(guān)注視圖。首先我們應(yīng)該讓數(shù) 據(jù)庫(kù)工作起來(lái)。

外部可見的服務(wù)器

想要你的服務(wù)器公開可見?
外部可見的服務(wù)器 一節(jié)有更多信息。

閱讀 Flask 創(chuàng)建數(shù)據(jù)庫(kù) 以繼續(xù)。