Day 3: Flask —— 使用Python和OpenShift进行即时Web开发
最近Packtpub找到了我,讓我給他們新出版的關于Flask的書寫書評。Flask是一個很流行的Python框架。那本書是Ron DuPlain寫的《Flask 即時Web開發(fā)》。我決定把“30天學習30種新技術”挑戰(zhàn)的第三天花在Flask上。在本文中,我首先將介紹Flask框架的一些基本知識,然后提供一個短篇的書評。同樣,我也會把示例應用移植到OpenShift上。對于Flask而言我不是一個完全意義上的新手,我也用它創(chuàng)建過示例應用。對我來說,這是一次很好的溫習。
給不了解這一系列文章的讀者:我正在嘗試“30天學習30種新技術”的挑戰(zhàn)。每天我會學習一種新技術,然后寫一篇文章介紹下我學到了什么,我怎樣使用新學的工具。如果一天不夠一項技術,我會每天討論一個關于該項技術的子話題。
Flask是什么?
有些開發(fā)者可能沒聽說過Flask,我來簡單介紹一下吧。Flask是一個基于Python的微型的web開發(fā)框架。雖然Flask是微框架,不過我們并不需要像別的微框架建議的那樣把所有代碼都寫到單文件中。畢竟微框架真正的含義是簡單和短小。我們可以從單文件架構開始工作,只用需要的特性。等我們漸漸熟悉Flask之后,可以將代碼提取成模塊,同時學習Flask提供的高級功能。Flask沒有給出關于文件架構的建議,但是在這篇文章的后面我會討論書中建議的文件架構。
讓我們看一段示例代碼吧:
from flask import Flask app = Flask(__name__)@app.route('/', defaults={'name':"Guest"}) @app.route('/<string:name>' , methods=['GET']) def say_hello(name):return "Hello " + nameif __name__ == "__main__":app.run(debug=True)這個例子很簡單,但是很有表達力。坐下來好好欣賞下。
我們來解釋一下上面的代碼吧:
第一行導入了Flask類,以便創(chuàng)建一個Flask應用的實例。
接下來一行我們創(chuàng)建了一個Flask類的實例。這是一個WSGI應用實例。WSGI是“Web服務器網(wǎng)關接口”(Web Service Gateway Interface)的縮寫,同時也是架設web項目的Python標準。這一行要告訴Flask到哪里去找應用所需的靜態(tài)資源和模板。在我們的例子中,我們傳遞了name,讓Flask在當前模塊內定位資源。
接著我們定義了一些關于/的路由。第一個路由是為根路徑/準備的,第二個則對應于類似/shekhar、/abc之類的路徑。對于/路由,我們將初始的name設定為Guest。如果用戶訪問 http://localhost:5000/ ,那么他會看到Hello Guest。如果用戶訪問 http://localhost:5000/shekhar ,那么他會看到 Hello shekhar。
最后我們使用python app.py命令來啟動開發(fā)服務器,以運行應用。我們把上面的代碼復制到app.py文件中。我們同時通過Debug=True開啟了調試,這樣當意料之外的情況出現(xiàn)時,瀏覽器就可以提供一個交互式的調試器。開啟調試的另一個好處是,改動文件 之后,服務會自動重新加載。我們可以讓調試器在后臺運行,然后繼續(xù)在我們的應用上工作。這提供了高效的開發(fā)環(huán)境。你可以問問Java開發(fā)者如何實現(xiàn)自動重新加載 :)
關于Flask值得知道的一些事:
Flask由Armin Ronacher于2010年創(chuàng)建。
Flask的靈感來自Sinatra。(Sinatra是一個極力避免小題大作的創(chuàng)建web應用的Ruby框架。)
Flask依賴于兩個庫,一個是Werkzeug(Python的WSGI工具庫),一個是Jinja2(一個模板引擎)。
Flask遵循“約定優(yōu)于配置”以及合理的默認值原則。
我為什么要關心Flask?
我決定學習Flask是因為:
易于學習: 我已有8年的Java開發(fā)經(jīng)驗。因此學完了Python基礎之后我想接觸web開發(fā)。Flask非常易于使用,同時,正如我上面的示例代碼所展示的那樣,是一個簡單得要死的框架。我大腦很自然地就適應它了,使用Flask,我可以更快地開發(fā)。
非常活躍、生機勃勃的社區(qū):我和幾個Python的朋友交談過,每個人都建議我從Flask入手。我也google過,我發(fā)現(xiàn)到處都說Flask是最好的現(xiàn)代web開發(fā)的Python框架。
快速創(chuàng)建REST API:我希望學習便于創(chuàng)建REST服務的框架。我們上面展示的例子,可以很容易地改成返回json文檔的應用,只需使用Flask的jsonify函數(shù)。未來的web應用將架構在REST后端和基于現(xiàn)代JawaScript MV*框架的前端。
280頁優(yōu)質文檔,有很多例子。
Flask遵循“約定優(yōu)于配置”。也有合理的默認值,比如靜態(tài)資源放置在static文件夾中。當然,大部分默認值是可覆蓋的。
關于《Flask 即時Web開發(fā)》
現(xiàn)在讓我們來看下這本書的一些細節(jié)吧。
這書屬于菜譜類,每節(jié)創(chuàng)建一個示例應用。全書僅78頁。
售價 $11。
作者為Flask提交過補丁。
我喜歡這書的哪些方面?
從virtualenv起步,這是python開發(fā)的正道。避免污染主python環(huán)境。方便不同的項目采用不同版本的python。
使用最佳實踐,比如良好的目錄結構之類的。雖然Flask是一個微框架,但是我們仍然應該為應用設定良好的層次。開發(fā)企業(yè)應用的時候這很有幫助。
介紹了一些我沒聽說過的Flask功能和擴展。 比如介紹了Flask-Script擴展。Flask-Script支持為Flask應用編寫外部的腳本。
詳細解釋了WTForms。WTForms有助于編寫基于表單的應用。
哪些可以更好?
對于初學者而言,一些主題不夠清晰,相關知識也講得不夠。我就看不明白為什么要在Flask應用中使用子域名。
缺乏Postgresql和Mysql之類真實數(shù)據(jù)庫的內容。雖然作者提到了使用不同的數(shù)據(jù)庫uri來連接Postgresql和Mysql,但沒有給出真實的例子。我更喜歡使用一個真實數(shù)據(jù)庫的例子,而不是把數(shù)據(jù)庫放在內存里。當然,把數(shù)據(jù)庫放在內存里對初學者來說更容易。
沒有提到REST服務:對于今時今日的應用而言,REST不可缺少。使用Flask的一大優(yōu)勢就是我們可以利用它很方便地編寫REST服務。
沒有提到如何配合Flask使用MongoDB之類的NoSQL數(shù)據(jù)庫。
Flask框架的單元測試支持相當完善,但是作者沒有介紹。
沒有提到云部署。在本文中,我將展示如何把書中提到的示例程序部署到OpenShift上。
我該買這本書么?
那些想編寫傳統(tǒng)的基于RDBMS的web應用的Flask初學者會發(fā)現(xiàn)這本書很有用。
Flask起步
開始使用Flask前我們需要安裝Python和virtualenv。本文中使用的Python版本是2.7。
安裝flask:
$ mkdir schedulingapp $ cd schedulingapp/ $ virtualenv venv --python=python2.7 $ . venv/bin/activate $ pip install flask在上面的命令中,我們首先創(chuàng)建了一個為示例應用準備的目錄,然后激活了virtualenv。virtualenv有助于避免污染python主環(huán)境。這意味著不同的項目可以使用不同的python版本。最后,我們安裝了flask。pip install flask會安裝最新的flask框架穩(wěn)定版。
部署示例應用到OpenShift
書中的示例程序是一個簡單的預約應用。注冊賬戶后,可以登錄應用創(chuàng)建、修改、查看預約。使用如下命令可以在本地運行應用:
$ git clone https://github.com/shekhargulati/instant-flask-web-development-book-app.git scheduleapp $ cd scheduleapp $ virtualenv venv --python=python2.7 $ . venv/bin/activate $ pip install -r requirements.txt $ python manage.py create_tables $ python manage.py runserver然后就可以在 http://127.0.0.1:5000 訪問應用了。用戶可以注冊賬號,開始使用應用了。
很不錯。但是我打算把我的應用部署到云端。我們將在OpenShift上部署應用。OpenShift是一個開源、公開、可伸縮的PaaS(平臺即服務)。
依賴
在構建應用之前,我們需要做些設置:
注冊一個OpenShift賬號。注冊是完全免費的,Red Hat給每個用戶三枚免費的Gear,可以用Gear運行你的應用。在寫作此文的時候,每個用戶能免費使用總共 1.5 GB 內存和 3 GB 硬盤空間。
安裝 rhc客戶端工具。rhc是ruby gem,因此你的機子上需要裝有 ruby 1.8.7以上版本。 只需輸入 sudo gem install rhc即可安裝 rhc 。如果你已經(jīng)安裝過了,確保是最新版。運行sudo gem update rhc即可升級。關于配置rhc命令行工具的詳細信息,請參考: https://openshift.redhat.com/community/developers/rhc-client-tools-install
使用 rhc 的 setup 命令配置你的 OpenShift 賬號。這個命令會幫助你創(chuàng)建一個命名空間,同時將你的ssh公鑰上傳至 OpenShift 服務器。
部署應用
輸入如下命令即可將應用部署到 OpenShift:
rhc create-app schedapp python-2.7 postgresql-9.2 --from-code=https://github.com/shekhargulati/schedapp-openshift.git這個命令將創(chuàng)建應用,設置公開的DNS,創(chuàng)建私有git倉庫,最后利用你的Github倉庫中的代碼來部署應用。應用可以通過 http://schedapp-shekhargulati.rhcloud.com/ 訪問。
今天就到這里了,歡迎反饋意見。
原文 Day 3: Flask--Instant Python Web Development with Python and OpenShift
翻譯 SegmentFault
from: http://segmentfault.com/a/1190000000351512
總結
以上是生活随笔為你收集整理的Day 3: Flask —— 使用Python和OpenShift进行即时Web开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Day 2: AngularJS ——
- 下一篇: websocket python爬虫_p