現(xiàn)在我們已經(jīng)有了數(shù)據(jù)庫模式,我們可以創(chuàng)建應(yīng)用的模塊了。讓我們把它 叫做 flaskr.py ,并放置在 flaskr 目錄下。我們從添加所需的導(dǎo) 入語句和添加配置部分開始。對于小型應(yīng)用,可以直接把配置放在主模塊 里,正如我們現(xià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 對象的用法如同字典,所以我們可以用新值更新 它。
數(shù)據(jù)庫路徑
操作系統(tǒng)有進(jìn)程當(dāng)前工作目錄的概念。不幸的是,你在 Web 應(yīng)用中不能 依賴此概念,因為你可能會在相同的進(jìn)程中運(yùn)行多個應(yīng)用。
為此,提供了 app.root_path 屬性以獲取應(yīng)用的路徑。配合 os.path 模塊使用,輕松可達(dá)任意文件。在本例中,我們把數(shù)據(jù)庫 放在根目錄下。
對于實際生產(chǎn)環(huán)境的應(yīng)用,推薦使用 實例文件夾 。
通常,加載一個單獨(dú)的、環(huán)境特定的配置文件是個好主意。Flask 允許你導(dǎo) 入多份配置,并且使用最后的導(dǎo)入中定義的設(shè)置。這使得配置設(shè)定過程更可 靠。 from_envvar() 可用于達(dá)此目的。
app.config.from_envvar(‘FLASKR_SETTINGS’, silent=True)
只需設(shè)置一個名為 FLASKR_SETTINGS 的環(huán)境變量,指向要加載的 配置文件。啟用靜默模式告訴 Flask 在沒有設(shè)置該環(huán)境變量的情況下噤聲。
此外,你可以使用配置對象上的 from_object() 方 法,并傳遞一個模塊的導(dǎo)入名作為參數(shù)。Flask 會從這個模塊初始化變量。 注意,只有名稱全為大寫字母的變量才會被采用。
secret_key 是保證客戶端會話的安全的要點。正確選擇一個盡可能難猜 測、盡可能復(fù)雜的密鑰。調(diào)試標(biāo)志關(guān)系交互式調(diào)試器的開啟。 永遠(yuǎn)不要在生產(chǎn)系統(tǒng)中激活調(diào)試模式 ,因為它將允許用戶在服務(wù)器上執(zhí) 行代碼。
我們還添加了一個讓連接到指定數(shù)據(jù)庫變得很簡單的方法,這個方法用于 在請求時開啟一個數(shù)據(jù)庫連接,并且在交互式 Python shell 和腳本中 也能使用。這為以后的操作提供了相當(dāng)?shù)谋憷N覀儎?chuàng)建了一個簡單的 SQLite 數(shù)據(jù)庫的連接,并讓它用 sqlite3.Row 表示數(shù)據(jù)庫中 的行。這使得我們可以通過字典而不是元組的形式訪問行:
def connect_db():
"""Connects to the specific database."""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
最后,如果我們想要把這個文件當(dāng)做獨(dú)立應(yīng)用來運(yùn)行,我們只需在可啟動 服務(wù)器文件的末尾添加這一行:
if __name__ == '__main__':
app.run()
如此我們便可以開始順利運(yùn)行這個應(yīng)用,使用如下命令:
python flaskr.py
你將會看見有消息告訴你訪問該服務(wù)器的地址。
當(dāng)你在瀏覽器中訪問服務(wù)器遇到一個 404 page not found 錯誤時, 是因為我們還沒有任何視圖。我們之后再來關(guān)注視圖。首先我們應(yīng)該讓數(shù) 據(jù)庫工作起來。
外部可見的服務(wù)器
- 想要你的服務(wù)器公開可見?
- 外部可見的服務(wù)器 一節(jié)有更多信息。
閱讀 Flask 創(chuàng)建數(shù)據(jù)庫 以繼續(xù)。
更多建議: