国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Flask——使用Python和OpenShift進(jìn)行即時(shí)Web開發(fā)

2019-11-14 17:42:45
字體:
供稿:網(wǎng)友

最近Packtpub找到了我,讓我給他們新出版的關(guān)于Flask的書寫書評(píng)。Flask是一個(gè)很流行的Python框架。那本書是Ron DuPlain寫的《Flask 即時(shí)Web開發(fā)》。我決定把“30天學(xué)習(xí)30種新技術(shù)”挑戰(zhàn)的第三天花在Flask上。在本文中,我首先將介紹Flask框架的一些基本知識(shí),然后提供一個(gè)短篇的書評(píng)。同樣,我也會(huì)把示例應(yīng)用移植到OpenShift上。對(duì)于Flask而言我不是一個(gè)完全意義上的新手,我也用它創(chuàng)建過示例應(yīng)用。對(duì)我來說,這是一次很好的溫習(xí)。

flask

給不了解這一系列文章的讀者:我正在嘗試“30天學(xué)習(xí)30種新技術(shù)”的挑戰(zhàn)。每天我會(huì)學(xué)習(xí)一種新技術(shù),然后寫一篇文章介紹下我學(xué)到了什么,我怎樣使用新學(xué)的工具。如果一天不夠一項(xiàng)技術(shù),我會(huì)每天討論一個(gè)關(guān)于該項(xiàng)技術(shù)的子話題。

Flask是什么?

有些開發(fā)者可能沒聽說過Flask,我來簡(jiǎn)單介紹一下吧。Flask是一個(gè)基于Python的微型的web開發(fā)框架。雖然Flask是微框架,不過我們并不需要像別的微框架建議的那樣把所有代碼都寫到單文件中。畢竟微框架真正的含義是簡(jiǎn)單和短小。我們可以從單文件架構(gòu)開始工作,只用需要的特性。等我們漸漸熟悉Flask之后,可以將代碼提取成模塊,同時(shí)學(xué)習(xí)Flask提供的高級(jí)功能。Flask沒有給出關(guān)于文件架構(gòu)的建議,但是在這篇文章的后面我會(huì)討論書中建議的文件架構(gòu)。

讓我們看一段示例代碼吧:

from flask import Flaskapp = 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)

這個(gè)例子很簡(jiǎn)單,但是很有表達(dá)力。坐下來好好欣賞下。

我們來解釋一下上面的代碼吧:

  1. 第一行導(dǎo)入了Flask類,以便創(chuàng)建一個(gè)Flask應(yīng)用的實(shí)例。

  2. 接下來一行我們創(chuàng)建了一個(gè)Flask類的實(shí)例。這是一個(gè)WSGI應(yīng)用實(shí)例。WSGI是“Web服務(wù)器網(wǎng)關(guān)接口”(Web Service Gateway Interface)的縮寫,同時(shí)也是架設(shè)web項(xiàng)目的Python標(biāo)準(zhǔn)。這一行要告訴Flask到哪里去找應(yīng)用所需的靜態(tài)資源和模板。在我們的例子中,我們傳遞了name,讓Flask在當(dāng)前模塊內(nèi)定位資源。

  3. 接著我們定義了一些關(guān)于/的路由。第一個(gè)路由是為根路徑/準(zhǔn)備的,第二個(gè)則對(duì)應(yīng)于類似/shekhar/abc之類的路徑。對(duì)于/路由,我們將初始的name設(shè)定為Guest。如果用戶訪問 http://localhost:5000/ ,那么他會(huì)看到Hello Guest。如果用戶訪問 http://localhost:5000/shekhar ,那么他會(huì)看到 Hello shekhar

  4. 最后我們使用python app.py命令來啟動(dòng)開發(fā)服務(wù)器,以運(yùn)行應(yīng)用。我們把上面的代碼復(fù)制到app.py文件中。我們同時(shí)通過Debug=True開啟了調(diào)試,這樣當(dāng)意料之外的情況出現(xiàn)時(shí),瀏覽器就可以提供一個(gè)交互式的調(diào)試器。開啟調(diào)試的另一個(gè)好處是,改動(dòng)文件 之后,服務(wù)會(huì)自動(dòng)重新加載。我們可以讓調(diào)試器在后臺(tái)運(yùn)行,然后繼續(xù)在我們的應(yīng)用上工作。這提供了高效的開發(fā)環(huán)境。你可以問問java開發(fā)者如何實(shí)現(xiàn)自動(dòng)重新加載 :)

關(guān)于Flask值得知道的一些事:

  1. Flask由Armin Ronacher于2010年創(chuàng)建。

  2. Flask的靈感來自Sinatra。(Sinatra是一個(gè)極力避免小題大作的創(chuàng)建web應(yīng)用的Ruby框架。)

  3. Flask依賴于兩個(gè)庫(kù),一個(gè)是Werkzeug(Python的WSGI工具庫(kù)),一個(gè)是Jinja2(一個(gè)模板引擎)。

  4. Flask遵循“約定優(yōu)于配置”以及合理的默認(rèn)值原則。

我為什么要關(guān)心Flask?

我決定學(xué)習(xí)Flask是因?yàn)椋?/p>

  1. 易于學(xué)習(xí): 我已有8年的Java開發(fā)經(jīng)驗(yàn)。因此學(xué)完了Python基礎(chǔ)之后我想接觸web開發(fā)。Flask非常易于使用,同時(shí),正如我上面的示例代碼所展示的那樣,是一個(gè)簡(jiǎn)單得要死的框架。我大腦很自然地就適應(yīng)它了,使用Flask,我可以更快地開發(fā)。

  2. 非常活躍、生機(jī)勃勃的社區(qū):我和幾個(gè)Python的朋友交談過,每個(gè)人都建議我從Flask入手。我也google過,我發(fā)現(xiàn)到處都說Flask是最好的現(xiàn)代web開發(fā)的Python框架。

  3. 快速創(chuàng)建REST API:我希望學(xué)習(xí)便于創(chuàng)建REST服務(wù)的框架。我們上面展示的例子,可以很容易地改成返回json文檔的應(yīng)用,只需使用Flask的jsonify函數(shù)。未來的web應(yīng)用將架構(gòu)在REST后端和基于現(xiàn)代JawaScript MV*框架的前端。

  4. 280頁(yè)優(yōu)質(zhì)文檔,有很多例子。

  5. Flask遵循“約定優(yōu)于配置”。也有合理的默認(rèn)值,比如靜態(tài)資源放置在static文件夾中。當(dāng)然,大部分默認(rèn)值是可覆蓋的。

關(guān)于《Flask 即時(shí)Web開發(fā)》

現(xiàn)在讓我們來看下這本書的一些細(xì)節(jié)吧。

  1. 這書屬于菜譜類,每節(jié)創(chuàng)建一個(gè)示例應(yīng)用。全書僅78頁(yè)。

  2. 售價(jià) $11。

  3. 作者為Flask提交過補(bǔ)丁。

我喜歡這書的哪些方面?

  1. virtualenv起步,這是python開發(fā)的正道。避免污染主python環(huán)境。方便不同的項(xiàng)目采用不同版本的python。

  2. 使用最佳實(shí)踐,比如良好的目錄結(jié)構(gòu)之類的。雖然Flask是一個(gè)微框架,但是我們?nèi)匀粦?yīng)該為應(yīng)用設(shè)定良好的層次。開發(fā)企業(yè)應(yīng)用的時(shí)候這很有幫助。

  3. 介紹了一些我沒聽說過的Flask功能和擴(kuò)展。 比如介紹了Flask-Script擴(kuò)展。Flask-Script支持為Flask應(yīng)用編寫外部的腳本。

  4. 詳細(xì)解釋了WTForms。WTForms有助于編寫基于表單的應(yīng)用。

哪些可以更好?

  1. 對(duì)于初學(xué)者而言,一些主題不夠清晰,相關(guān)知識(shí)也講得不夠。我就看不明白為什么要在Flask應(yīng)用中使用子域名。

  2. 缺乏Postgresql和MySQL之類真實(shí)數(shù)據(jù)庫(kù)的內(nèi)容。雖然作者提到了使用不同的數(shù)據(jù)庫(kù)uri來連接Postgresql和Mysql,但沒有給出真實(shí)的例子。我更喜歡使用一個(gè)真實(shí)數(shù)據(jù)庫(kù)的例子,而不是把數(shù)據(jù)庫(kù)放在內(nèi)存里。當(dāng)然,把數(shù)據(jù)庫(kù)放在內(nèi)存里對(duì)初學(xué)者來說更容易。

  3. 沒有提到REST服務(wù):對(duì)于今時(shí)今日的應(yīng)用而言,REST不可缺少。使用Flask的一大優(yōu)勢(shì)就是我們可以利用它很方便地編寫REST服務(wù)。

  4. 沒有提到如何配合Flask使用MongoDB之類的NoSQL數(shù)據(jù)庫(kù)。

  5. Flask框架的單元測(cè)試支持相當(dāng)完善,但是作者沒有介紹。

  6. 沒有提到云部署。在本文中,我將展示如何把書中提到的示例程序部署到OpenShift上。

我該買這本書么?

那些想編寫傳統(tǒng)的基于RDBMS的web應(yīng)用的Flask初學(xué)者會(huì)發(fā)現(xiàn)這本書很有用。

Flask起步

開始使用Flask前我們需要安裝Pythonvirtualenv。本文中使用的Python版本是2.7。

安裝flask:

$ mkdir schedulingapp$ cd schedulingapp/$ virtualenv venv --python=python2.7$ . venv/bin/activate$ pip install flask

在上面的命令中,我們首先創(chuàng)建了一個(gè)為示例應(yīng)用準(zhǔn)備的目錄,然后激活了virtualenv。virtualenv有助于避免污染python主環(huán)境。這意味著不同的項(xiàng)目可以使用不同的python版本。最后,我們安裝了flask。pip install flask會(huì)安裝最新的flask框架穩(wěn)定版。

部署示例應(yīng)用到OpenShift

書中的示例程序是一個(gè)簡(jiǎn)單的預(yù)約應(yīng)用。注冊(cè)賬戶后,可以登錄應(yīng)用創(chuàng)建、修改、查看預(yù)約。使用如下命令可以在本地運(yùn)行應(yī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 訪問應(yīng)用了。用戶可以注冊(cè)賬號(hào),開始使用應(yīng)用了。

很不錯(cuò)。但是我打算把我的應(yīng)用部署到云端。我們將在OpenShift上部署應(yīng)用。OpenShift是一個(gè)開源、公開、可伸縮的PaaS(平臺(tái)即服務(wù))。

依賴

在構(gòu)建應(yīng)用之前,我們需要做些設(shè)置:

  1. 注冊(cè)一個(gè)OpenShift賬號(hào)。注冊(cè)是完全免費(fèi)的,Red Hat給每個(gè)用戶三枚免費(fèi)的Gear,可以用Gear運(yùn)行你的應(yīng)用。在寫作此文的時(shí)候,每個(gè)用戶能免費(fèi)使用總共 1.5 GB 內(nèi)存和 3 GB 硬盤空間。

  2. 安裝 rhc客戶端工具rhc是ruby gem,因此你的機(jī)子上需要裝有 ruby 1.8.7以上版本。 只需輸入 sudo gem install rhc即可安裝 rhc 。如果你已經(jīng)安裝過了,確保是最新版。運(yùn)行sudo gem update rhc即可升級(jí)。關(guān)于配置rhc命令行工具的詳細(xì)信息,請(qǐng)參考: https://openshift.redhat.com/community/developers/rhc-client-tools-install

  3. 使用 rhc 的 setup 命令配置你的 OpenShift 賬號(hào)。這個(gè)命令會(huì)幫助你創(chuàng)建一個(gè)命名空間,同時(shí)將你的ssh公鑰上傳至 OpenShift 服務(wù)器。

部署應(yīng)用

輸入如下命令即可將應(yīng)用部署到 OpenShift:

rhc create-app schedapp python-2.7 postgresql-9.2 --from-code=https://github.com/shekhargulati/schedapp-openshift.git

這個(gè)命令將創(chuàng)建應(yīng)用,設(shè)置公開的DNS,創(chuàng)建私有g(shù)it倉(cāng)庫(kù),最后利用你的Github倉(cāng)庫(kù)中的代碼來部署應(yīng)用。應(yīng)用可以通過 http://schedapp-shekhargulati.rhcloud.com/ 訪問。

今天就到這里了,歡迎反饋意見。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 眉山市| 深泽县| 凤城市| 全椒县| 仪陇县| 海城市| 边坝县| 平远县| 荔波县| 忻城县| 清新县| 绵阳市| 望城县| 上杭县| 西丰县| 维西| 汉源县| 桂平市| 浦东新区| 阿拉尔市| 始兴县| 阿荣旗| 金寨县| 乌鲁木齐县| 勃利县| 临湘市| 徐州市| 新巴尔虎右旗| 石棉县| 兴安县| 临沭县| 民权县| 綦江县| 色达县| 闻喜县| 拉萨市| 香港 | 汉川市| 元阳县| 巴彦淖尔市| 屏南县|