一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

從零開始用 Flask 搭建一個網(wǎng)站(一)

 網(wǎng)海拾貝網(wǎng)絡豬 2017-11-07

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'
export
PATH='$PYENV_ROOT/bin:$PATH'
export PATH=$PATH:/sbin/
eval '$(pyenv init -)'

如果使用 bash,在 ~/.bash_profile 中加入即可。保存后重啟終端即可。
如果要安裝 Python 3.5.2,可以用

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個頂級文件夾:

  • app ——(本例中是 jbox)Flask 程序保存在此文件夾中

  • migrations ——包含數(shù)據(jù)庫遷移腳本(安裝了 flask-migrate 后自動生成)

  • tests ——單元測試放在此文件夾下

  • venv ——Python 虛擬環(huán)境

同時還有一些文件:

  • requirements.txt —— 列出了所有的依賴包,以便于在其他電腦中重新生成相同的環(huán)境

  • config.py 存儲配置

  • manage.py 啟動程序或者其他任務

  • gun.conf Gunicorn 配置文件

雖然新建的 Flask Project 已經(jīng)可以運行,但是我們還是要按照標準的 Flask 程序來改造項目結(jié)構(gòu)。下面我們就來改造一下 TestProject。

在命令行中依次使用以下命令來安裝 Flask 擴展:

pip install flask-script
pip install flask-sqlalchemypip install flask-migrate

flask-script 可以自定義命令行命令,用來啟動程序或其它任務;flask-sqlalchemy 用來管理數(shù)據(jù)庫的工具,支持多種數(shù)據(jù)庫后臺;flask-migrate 是數(shù)據(jù)庫遷移工具,該工具命令集成到 flask-script 中,方便在命令行中進行操作。

然后創(chuàng)建 config.py 文件,內(nèi)容如下:

config.py

config 顧名思義,保存了一些配置變量。SQLALCHEMY_DATABASE_URI 變量在不同的配置中被賦予了不同的值,這樣就可以在不同的環(huán)境中切換數(shù)據(jù)庫。如果是遠程數(shù)據(jù)庫則從環(huán)境變量中讀取 URL,否則在本地路徑中創(chuàng)建。

接下來創(chuàng)建一個 app 文件夾,并在此文件夾中創(chuàng)建一個 __init__.py 文件(init 前后都有兩個下劃線):

app/__init__.py

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('/')
def index():    
   return '

Hello World

'

這里使用 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,在彈出的對話框中填寫包名然后確認即可):

app/main/__ init__.py

最后引用了兩個文件,之所以寫在最后是因為避免循環(huán)導入依賴,因為接下來在 main 文件夾下 創(chuàng)建的 views.py 和 errors.py 都要導入藍本 main。

app/main/views.py

在之前路由的概念解釋中,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 模板:

app/templates/index.html


app/templates/404.html

之后會講解模板的具體用法,現(xiàn)在接著來定義 errors.py:

app/main/errors.py

上面的步驟是讓程序的路由保存在 views.py 中,而錯誤處理交給 errors.py,這兩個模塊已經(jīng)和藍本 main 關聯(lián)起來了(在藍本中導入了這兩個模塊),現(xiàn)在需要在工廠函數(shù)中注冊藍本 main。將如下代碼加入到上面缺省代碼中即可:

app/__init__.py

最后兩個步驟是創(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:

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)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产三级视频不卡在线观看| 中文字幕高清免费日韩视频| 一二区不卡不卡在线观看| 欧美精品久久一二三区| 久久91精品国产亚洲| 久草精品视频精品视频精品| 在线观看国产午夜福利| 亚洲天堂一区在线播放| 五月综合婷婷在线伊人| 精品欧美一区二区三久久| 午夜亚洲少妇福利诱惑| 色一情一伦一区二区三| 色老汉在线视频免费亚欧| 久久精品a毛片看国产成人| 色综合伊人天天综合网中文| 欧美熟妇一区二区在线| 又黄又爽禁片视频在线观看| 激情丁香激情五月婷婷| 日本亚洲欧美男人的天堂| 欧美日韩精品久久亚洲区熟妇人| 国产一区日韩二区欧美| 91亚洲精品综合久久| 中国一区二区三区人妻 | 亚洲欧美日本视频一区二区| 欧美中文字幕日韩精品| 九九九热视频免费观看| 国产熟女一区二区不卡| 午夜精品在线视频一区| 超薄肉色丝袜脚一区二区| 99精品人妻少妇一区二区人人妻| 亚洲一区二区精品国产av| 暴力性生活在线免费视频| 天堂网中文字幕在线视频| 亚洲男女性生活免费视频| 日韩精品一区二区三区av在线| 日韩成人动作片在线观看| 色老汉在线视频免费亚欧| 精品偷拍一区二区三区| 内用黄老外示儒术出处| 成人日韩视频中文字幕| 国产永久免费高清在线精品|