Flask是一個輕量級的基于 Python 的框架,但是擴展性非常良好(Github 上 22000 多個 star 就知道群眾的選擇不無道理),其他的這里就不多提了,下面就開始我們的網(wǎng)站搭建之路。 開始環(huán)境搭建首先需要準備 Python 開發(fā)環(huán)境,這里推薦使用 pyenv 來安裝和管理 Python。筆者使用的是 Mac OSX(自帶 Python 2.6),直接使用如下命令安裝 pyenv: brew install pyenv 之后要升級 pyenv 的話就用: brew upgrade pyenv 安裝完以后,需要配置環(huán)境變量,如果使用 zsh,需要在 ~/.zshrc 加入以下代碼: export PYENV_ROOT='$HOME/.pyenv' 如果使用 bash,在 ~/.bash_profile 中加入即可。保存后重啟終端即可。 pyenv install 3.5.2 查看安裝的 Python 版本: pyenv versions 切換局部 Python 環(huán)境(這里一般指在 Application 文件夾下切換環(huán)境) pyenv local 3.5.2 關于其他更多命令,可以參考 Command.md 使用 IDE這里推薦使用 PyCharm 來進行 python 項目開發(fā)。下載安裝后,新建一個 Flask 項目,然后指定目錄、python 環(huán)境: 完成后點擊 Create,這樣就創(chuàng)建了一個 Flask 項目,如果沒有安裝 Flask,PyCharm 會自動下載安裝。如果想使用 virtualenv,可以參考下一個步驟。 使用虛擬環(huán)境使用虛擬環(huán)境可以方便地安裝 Flask 而且可以在系統(tǒng)的 Python 解釋器中避免包的混亂和版本的沖突。Python 3.3以后原生支持虛擬環(huán)境,命令為 pyvenv。可以使用如下命令創(chuàng)建虛擬環(huán)境(進入剛才創(chuàng)建的 Flask 項目文件夾): pyvenv venv 如果使用 Python 2.7或者以下版本,可以使用第三方工具 virtualenv 創(chuàng)建虛擬環(huán)境: sudo easy_install virtualenv 以上命令就可以安裝 virtualenv(如果沒有安裝 easy_install,需要手動安裝,而 pyvenv 已經(jīng)自帶 pip 和 easy_install)。下一步使用 virtualenv 命令在文件夾中創(chuàng)建 Python 虛擬環(huán)境: virtualenv venv 完成后,會在 Flask 項目下生成 venv 文件夾。在使用虛擬環(huán)境之前,要先使用(pyvenv 和 virtualenv 創(chuàng)建的虛擬環(huán)境是一樣的,因此以下命令均可使用): source venv/bin/activate 來激活,如果要退出虛擬環(huán)境,可以使用: deactivate 創(chuàng)建的虛擬環(huán)境會自動安裝 pip 和 easy_install,接下來可以使用: pip install flask 接下來就可以在 Flask 中開始自由地遨(入)游(坑)啦! Flask 程序結(jié)構(gòu)在介紹 Flask 的程序結(jié)構(gòu)之前,先來看看標準 Flask 項目的項目結(jié)構(gòu)(筆者以為從宏觀到微觀的方式可以更快的了解一個東西)。使用 PyCharm 新建 Flask 項目后,項目結(jié)構(gòu)如下圖所示: 只有三個文件夾(venv 文件夾已經(jīng)用命令行生成了)和一個簡單的入口類,接下來要把項目結(jié)構(gòu)改造成標準的 Flask 項目結(jié)構(gòu): Flask 項目有4個頂級文件夾:
同時還有一些文件:
雖然新建的 Flask Project 已經(jīng)可以運行,但是我們還是要按照標準的 Flask 程序來改造項目結(jié)構(gòu)。下面我們就來改造一下 TestProject。 在命令行中依次使用以下命令來安裝 Flask 擴展: pip install flask-script flask-script 可以自定義命令行命令,用來啟動程序或其它任務;flask-sqlalchemy 用來管理數(shù)據(jù)庫的工具,支持多種數(shù)據(jù)庫后臺;flask-migrate 是數(shù)據(jù)庫遷移工具,該工具命令集成到 flask-script 中,方便在命令行中進行操作。 然后創(chuàng)建 config.py 文件,內(nèi)容如下:
config 顧名思義,保存了一些配置變量。SQLALCHEMY_DATABASE_URI 變量在不同的配置中被賦予了不同的值,這樣就可以在不同的環(huán)境中切換數(shù)據(jù)庫。如果是遠程數(shù)據(jù)庫則從環(huán)境變量中讀取 URL,否則在本地路徑中創(chuàng)建。 接下來創(chuàng)建一個 app 文件夾,并在此文件夾中創(chuàng)建一個 __init__.py 文件(init 前后都有兩個下劃線):
create_app() 就是程序的工廠函數(shù),參數(shù)就是配置類的名字,即 config.py,其中保存的配置可以使用 from_object() 方法導入。 接下來要解釋兩個重要的概念——路由和視圖函數(shù)??蛻舳税颜埱蟀l(fā)給 Web 服務器,Web 服務器再把請求發(fā)給 Flask 程序?qū)嵗?,F(xiàn)lask 程序?qū)嵗枰烂總€ URL 請求要運行哪些代碼,所以保存了一個 URL 到 Python 函數(shù)的映射關系。處理 URL 和函數(shù)之間關系的程序稱為路由,這個函數(shù)稱為視圖函數(shù)。例如: @app.route('/') 這里使用 app.route 修飾器來定義路由,app 指 Flask 程序?qū)嵗龑ο?,后面可以看到使用藍本管理路由后,由藍本實例對象來取代 app。 Flask 使用藍本來定義路由,在藍本中定義的路由處于休眠狀態(tài),直到藍本注冊到程序上后,路由真正成為程序的一部分。藍本通常使用結(jié)構(gòu)化的方式保存在包的多個模塊中。 下來在 app 文件夾下創(chuàng)建一個子文件夾 main,并在 main 中創(chuàng)建 __init__.py(如果使用 PyCharm,這里有個快捷方式,右鍵點擊 app 文件夾,在菜單中選擇 new -> Python Package,在彈出的對話框中填寫包名然后確認即可):
最后引用了兩個文件,之所以寫在最后是因為避免循環(huán)導入依賴,因為接下來在 main 文件夾下 創(chuàng)建的 views.py 和 errors.py 都要導入藍本 main。
在之前路由的概念解釋中,index 函數(shù)直接返回了 HTML 字符串(通常不這么做),這里則使用了 render_templete() 函數(shù)來渲染 index.html,并返回。 Flask 使用了 Jinja2 引擎來渲染模板,模板文件都放在 templates 文件夾下,并且只能命名為 templates,否則 Jinja2 會拋出 TemplageNotFound 異常。 由于我們的app 是一個 Python Package(在目錄中包含 __init__.py 默認成為 Python Package),所以需要將 templates 放在 app 目錄下。在 app 下 中創(chuàng)建名為 templates 的文件夾,在 PyCharm 中右鍵點擊該文件夾,然后選擇 Make Directory As -> Template Folder,如圖: 接下來在 templates 下新建一個 index.html 和 404.html 模板:
之后會講解模板的具體用法,現(xiàn)在接著來定義 errors.py:
上面的步驟是讓程序的路由保存在 views.py 中,而錯誤處理交給 errors.py,這兩個模塊已經(jīng)和藍本 main 關聯(lián)起來了(在藍本中導入了這兩個模塊),現(xiàn)在需要在工廠函數(shù)中注冊藍本 main。將如下代碼加入到上面缺省代碼中即可:
最后兩個步驟是創(chuàng)建 requirements.txt 以及啟動腳本 manage.py。程序中必須包含一個 requirements.txt 文件,用于記錄所有的依賴包和版本號,便于在其它電腦上創(chuàng)建相同的開發(fā)環(huán)境。直接在終端使用如下命令即可創(chuàng)建 requirements.txt 文件: pip freeze > requirements.txt 以后安裝了新的依賴包或者升級版本后,重新執(zhí)行該命令即可更新 requirements.txt 文件。如果要手動添加也可以,在 PyCharm 中用 Command + , 喚出 Preferences 對話框,然后選擇 Project -> Project Interpreter 即可查看所有的依賴包及其版本號(還有最新版本號提示),如圖: 如果要在另一臺電腦上創(chuàng)建這個虛擬環(huán)境的完全副本,運行以下命令即可: pip install -r requirements.txt 最后創(chuàng)建啟動腳本 manage.py:
這個腳本首先創(chuàng)建程序,然后增加了兩個命令:shell 和 db,我們之后可以在命令行中直接使用。 到此為止,我們的目錄結(jié)構(gòu)如下: 運行現(xiàn)在就來啟動我們的程序,在命令行中進入 TestProject 目錄,然后執(zhí)行如下命令即可運行: python manage.py runserver 命令行運行截圖如下: Flask 默認的本機地址為:http://127.0.0.1:5000/ ,現(xiàn)在用瀏覽器打開這個地址,應該可以看到如下頁面: 到這一步,我們的第一個 Flask 程序已經(jīng)完成了!雖然還沒有建立數(shù)據(jù)庫,頁面也非常糟糕,但是之后我們會一步步進行完善! 本文參考書籍 Flask Web 開發(fā):基于 Python 的 Web 應用開發(fā)實戰(zhàn)(作者: Miguel Grinberg) |
|
來自: 網(wǎng)海拾貝網(wǎng)絡豬 > 《python》