国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Day 25: 聯(lián)合Tornado、MongoDB 和 AngularJS 進行應(yīng)用開發(fā)

hsluoyz / 2736人閱讀

摘要:在被收購之后,維護并繼續(xù)發(fā)展。設(shè)置是告訴應(yīng)用在目錄尋找應(yīng)用模板。設(shè)置告訴應(yīng)用使用目錄里面的類似圖像文件等靜態(tài)文件。我們會在應(yīng)用開發(fā)過程中,保持著調(diào)試器在后臺運行。這能提供高效的開發(fā)環(huán)境。我們會把回應(yīng)狀態(tài)設(shè)為已創(chuàng)建。

編者注:我們發(fā)現(xiàn)了有趣的系列文章《30天學(xué)習(xí)30種新技術(shù)》,正在翻譯,一天一篇更新,年終禮包。下面是第23天的內(nèi)容。


今天的《30天學(xué)習(xí)30種新技術(shù)》,我決定暫時放下 JavaScripts 的內(nèi)容,而去學(xué)習(xí)一個叫做 Tornado 的 Web 框架。我決定去學(xué) Tornado 的原因是我這樣就可以用 Python 去寫 Web 程序了。我只學(xué)過 Flask 框架,所以我覺得 Tornado 應(yīng)該能增加我在 Python Web 開發(fā)方面的知識。我們在這篇博文中描述的應(yīng)用使用 Tornado 來作 REST 后端,MongoDB 作為數(shù)據(jù)庫,AngularJS 作為客戶端那邊的 JavaScripts MVC 框架,然后 OpenShift 作為部署的平臺。

什么是 Tornado?

Tornado 是一個開源的 Python Web 框架,是一個非阻塞(non blocking)的的 Web 服務(wù)器, 最開始是在 FriendFeed開發(fā)的。在 FriendFeed 被收購之后,F(xiàn)acebook 維護并繼續(xù)發(fā)展 Tornado。由于它的非阻塞網(wǎng)絡(luò)輸入輸出(non-blocking network I/O )特性,它有卓越的可擴展性,能同時支持一千多個連接。

應(yīng)用案例

在這篇博文中,我們將會開發(fā)一個允許用戶發(fā)布和分享鏈接的社交化書簽應(yīng)用。你可以在這里看到真實在 OpenShift 上運行著的程序。這是我們在 Day 22 開發(fā)過的應(yīng)用,所以可以參考那篇博文以便更好地理解這個應(yīng)用案例。

GitHub 倉庫

今天這個演示應(yīng)用的代碼可以在 GitHub 上得到:day25-tornado-demo-app。

前期準(zhǔn)備

在我們開始 Tornado 之前,我們需要在機器上安裝 Python 和 virtualenv。在這篇博文中,我使用的 Python 版本是 2.7

這個應(yīng)用使用 MongoDB 作為數(shù)據(jù)存儲的軟件,所以請下載對應(yīng)你所用操作系統(tǒng)的最新的 MongoDB 發(fā)行版。

開發(fā) Tornado MongoDB 應(yīng)用

我們會使用 pip 安裝 Tornado。對于那些不熟悉 pip 的開發(fā)者,其實 pip 就是一個 Python 的包管理器。我們可以從官網(wǎng)安裝 pip。打開終端,轉(zhuǎn)到任何一個在文件系統(tǒng)上方便的目錄,然后運行下面的命令:

$ mkdir getbookmarks
$ cd getbookmarks
$ virtualenv venv --python=python2.7
$ . venv/bin/activate
$ pip install tornado
$ pip install pymongo

上面的命令會在本機上創(chuàng)建一個 getbookmarks 目錄,然后在 Python 2.7 下激活 virtualenv,然后安裝 tornado 包,最后安裝 pymongo。其中,pymongo 是官方 MongoDB 的 Python 驅(qū)動;我們會使用它往 MongoDB 中寫入故事(stories)。

在 getbookmarks 目錄下,創(chuàng)建一個名為 getbookmarks.py 的文件:

$ touch getbookmarks.py

復(fù)制下面的代碼,然后粘貼到 getbookmarks.py 源文件中:

import os
from tornado import ioloop,web
from pymongo import MongoClient
import json
from bson import json_util
from bson.objectid import ObjectId

class IndexHandler(web.RequestHandler):
    def get(self):
        self.write("Hello World!!")

settings = {
    "template_path": os.path.join(os.path.dirname(__file__), "templates"),
    "static_path": os.path.join(os.path.dirname(__file__), "static"),
    "debug" : True
}

application = web.Application([
    (r"/", IndexHandler),
    (r"/index", IndexHandler),
],**settings)

if __name__ == "__main__":
    application.listen(8888)
    ioloop.IOLoop.instance().start()

上面的代碼會執(zhí)行下面的事情:
1. 我們從導(dǎo)入需要的庫開始;
2. 下一步,我們定義一個擴展類 web.RequestHandler 的新類:IndexHandler。一個 Tornado web 應(yīng)用會把 URLs 或者 URL 模式對應(yīng)到 web.RequestHandler 的子類。這些類定義了 get()post() 等方法去處理訪問這個 URL 的 HTTP GET 或者 POST 請求。當(dāng)在地址 "/" 下收到一個 GET 請求時,IndexHandler 會返回一個 "Hello World!!"
3. 接著我們定義了一些應(yīng)用的設(shè)置。template_path 設(shè)置是告訴 Tornado 應(yīng)用在 template 目錄尋找應(yīng)用模板。static_path 設(shè)置告訴應(yīng)用使用 static 目錄里面的類似 css、圖像、javascript 文件等靜態(tài)文件。通過設(shè)置 debugTrue,你對項目做了改變后,會自動重載,不用重啟查看效果。我們會在應(yīng)用開發(fā)過程中,保持著調(diào)試器在后臺運行。這能提供高效的開發(fā)環(huán)境。
4. 接著,我們創(chuàng)建一個Tornado 應(yīng)用實例,把路由routes)和 settings 傳遞進去。
5. 最后,我們使用 python getbookmarks.py 命令啟動服務(wù)器去運行這個應(yīng)用

打開 http://localhost:8888 和 http://localhost:8888/index 看看是否看到 "Hello World!!"

配置 MongoDB

在導(dǎo)入庫之后,增加下面的語句:

MONGODB_DB_URL = os.environ.get("OPENSHIFT_MONGODB_DB_URL") if os.environ.get("OPENSHIFT_MONGODB_DB_URL") else "mongodb://localhost:27017/"
MONGODB_DB_NAME = os.environ.get("OPENSHIFT_APP_NAME") if os.environ.get("OPENSHIFT_APP_NAME") else "getbookmarks"

client = MongoClient(MONGODB_DB_URL)
db = client[MONGODB_DB_NAME]

我們定義了 MongoDB 連接的路由和數(shù)據(jù)庫的名稱。如果應(yīng)用是部署到 OpenShift 上,那么 OpenShift 特定環(huán)境變量會先被使用,如果沒有,就會使用本機上的配置。

我們創(chuàng)建了一個 MongoClient 實例,把連接的路由傳遞進去。這個連接路由是只想運行著的 mongod 實例。接著我們使用 MongoClient 實例使用數(shù)據(jù)庫

創(chuàng)建和列出所有的故事(Stories)

現(xiàn)在我們要添加創(chuàng)建新的故事(stories)和列出所有故事(stories)的功能。我們首先把路由加到下面的應(yīng)用實例中:

application = web.Application([
    (r"/", IndexHandler),
    (r"/index", IndexHandler),
    (r"/api/v1/stories",StoriesHandler),
],**settings)

接著,我們定義一個把故事(stories)保存在 MongoDB 和在里面查找所有故事(stories)的 StoriesHandler:

class StoriesHandler(web.RequestHandler):
    def get(self):
        stories = db.stories.find()
        self.set_header("Content-Type", "application/json")
        self.write(json.dumps(list(stories),default=json_util.default))


    def post(self):
        story_data = json.loads(self.request.body)
        story_id = db.stories.insert(story_data)
        print("story created with id " + str(story_id))
        self.set_header("Content-Type", "application/json")
        self.set_status(201)

在上面的代碼中:
1. 當(dāng)一個用戶發(fā)出一個 GET 請求到 /api/v1/stories 時,我們會向 MongoDB 中發(fā)出一個 Find() 方法請求。由于我們沒有具體聲明是任何查詢,所以它會從 MongoDB 取出所有的故事。我們把內(nèi)容類型(content type)設(shè)置為 application/json,然后轉(zhuǎn)出(dump) json 回應(yīng)。
2. 當(dāng)用戶發(fā)出一個 POST 請求到 /api/v1/stories,然后我們首先解碼 json 的內(nèi)容到一個字典(dictionary),然后把數(shù)據(jù)寫入 MongoDB。我們會把回應(yīng)狀態(tài)(response status)設(shè)為 201(已創(chuàng)建)。

查看多帶帶的故事(story)

最后一個后端功能是查看多帶帶的故事,我們首先指明路由:

application = web.Application([
    (r"/", IndexHandler),
    (r"/index", IndexHandler),
    (r"/api/v1/stories",StoriesHandler),
    (r"/api/v1/stories/(.*)", StoryHandler)
],**settings)

我們編寫 StoryHandler

class StoryHandler(web.RequestHandler):
    def get(self , story_id):
        story = db.stories.find_one({"_id":ObjectId(str(story_id))})
        self.set_header("Content-Type", "application/json")
        self.write(json.dumps((story),default=json_util.default))

上面的代碼查找對應(yīng) story_id 的故事,然后轉(zhuǎn)出 json 回應(yīng)。

AngualarJS 前端

我決定重用我在 第 22 天 寫的前端。第 22 天的內(nèi)容展示了如何以 Java Spring 框架作為后端去使用 AngularJS。使用 JavaScripts MVC 架構(gòu)的最好的地方就是你可以重用前端的代碼,如果你的應(yīng)用符合 REST 接口客戶端的要求??梢蚤喿x第 22 天的內(nèi)容了解更多。

你可以在我的 GiHub 倉庫下載 AngularJS 前端。復(fù)制靜態(tài)文件和模板文件夾,粘貼到 getbookmarks.py 所在文件夾。

部署應(yīng)用到 OpenShift

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

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

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

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

部署應(yīng)用

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

$ rhc create-app day25demo python-2.7 mongodb-2 --from-code https://github.com/shekhargulati/day25-tornado-demo-app.git

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

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


原文 Day 25: Tornado--Combining Tornado, MongoDB, and AngularJS to Build an App
翻譯 SegmentFault

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/18695.html

相關(guān)文章

  • Day 22: 使用Spring、MongoDBAngularJS開發(fā)單頁面應(yīng)用

    摘要:今天的天學(xué)習(xí)種新技術(shù)挑戰(zhàn),我決定使用框架和開發(fā)一個單頁面應(yīng)用。應(yīng)用我們將開發(fā)一個社交化書簽應(yīng)用,允許用戶提交和分享鏈接。在元素中使用指令,意味著在整個中可用。我使用作為該應(yīng)用的模塊名。 編者注:我們發(fā)現(xiàn)了有趣的系列文章《30天學(xué)習(xí)30種新技術(shù)》,正在翻譯,一天一篇更新,年終禮包。下面是第22天的內(nèi)容。 今天的《30天學(xué)習(xí)30種新技術(shù)》挑戰(zhàn),我決定使用Spring框架、MongoD...

    yuanzhanghu 評論0 收藏0
  • Python任務(wù)調(diào)度模塊APScheduler

    介紹 官網(wǎng)文檔:http://apscheduler.readthedoc...API:http://apscheduler.readthedoc... APScheduler是一個python的第三方庫,用來提供python的后臺程序。包含四個組件,分別是: triggers: 任務(wù)觸發(fā)器組件,提供任務(wù)觸發(fā)方式 job stores: 任務(wù)商店組件,提供任務(wù)保存方式 executors: 任務(wù)...

    zxhaaa 評論0 收藏0
  • Day 15:Meteor —— 從零開始創(chuàng)建一個 Web 應(yīng)用

    摘要:在我的機子上,運行于端口,以避免和其他默認(rèn)運行于端口的沖突。我們可以使用命令連接數(shù)據(jù)庫查看定義應(yīng)用層次創(chuàng)建的模板應(yīng)用有一個問題,客戶端和服務(wù)器段的代碼是一樣的。在中加入然后添加問題模板注意我們使用了來確保用戶未登錄的情況下應(yīng)用。 編者注:我們發(fā)現(xiàn)了有趣的一系列文章《30天學(xué)習(xí)30種新技術(shù)》,正在翻譯中,一天一篇更新,年終禮包。下面是第15天的內(nèi)容。 到目前為止我們討論了Bower...

    Big_fat_cat 評論0 收藏0
  • Day 15:Meteor —— 從零開始創(chuàng)建一個 Web 應(yīng)用

    摘要:在我的機子上,運行于端口,以避免和其他默認(rèn)運行于端口的沖突。我們可以使用命令連接數(shù)據(jù)庫查看定義應(yīng)用層次創(chuàng)建的模板應(yīng)用有一個問題,客戶端和服務(wù)器段的代碼是一樣的。在中加入然后添加問題模板注意我們使用了來確保用戶未登錄的情況下應(yīng)用。 編者注:我們發(fā)現(xiàn)了有趣的一系列文章《30天學(xué)習(xí)30種新技術(shù)》,正在翻譯中,一天一篇更新,年終禮包。下面是第15天的內(nèi)容。 到目前為止我們討論了Bower...

    lpjustdoit 評論0 收藏0
  • MongoDB 資源、庫、工具、應(yīng)用程序精選列表中文版

    摘要:推薦閱讀資源庫工具應(yīng)用程序精選列表中文版有哪些鮮為人知,但是很有意思的網(wǎng)站一份攻城獅筆記每天搜集上優(yōu)秀的項目一些有趣的民間故事超好用的谷歌瀏覽器油猴插件合集目錄資源文檔文章圖書會談教程更多庫工具管理數(shù)據(jù)部署桌面發(fā)展監(jiān)控應(yīng)用資源文檔介紹文檔教 推薦閱讀 MongoDB 資源、庫、工具、應(yīng)用程序精選列表中文版 有哪些鮮為人知,但是很有意思的網(wǎng)站? 一份攻城獅筆記 每天搜集 Github ...

    e10101 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<