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