Dock框架學(xué)習(xí)

DOCK 框架學(xué)習(xí)

  1. download and install
  2. 簡(jiǎn)單使用h ello world
  3. 無(wú)

download & install

從gitlab上下載dock代碼,cd 到setup.py那個(gè)目錄下榔昔,執(zhí)行煞茫,python setup.py develop

note:需要python2  commnad line tools 

安裝完成后氓辣,再執(zhí)行pip list 會(huì)看到一個(gè)有Dock 的package
這些操作建議使用虛擬環(huán)境 virtualenv
以上步驟執(zhí)行完就安裝成功了

簡(jiǎn)單使用 hello world

新建一個(gè)文件 first_dock_app.py

#coding:utf-8

import dock
from dock.common import log,statsd,config,run
from dock.web import DockApp
app = DockApp(__name__)

@app.flaskapp.route('/')
def hello():
    return 'hello world'

if __name__ == '__main__':
    app.run()

寫(xiě)法和flask基本一樣洼滚,因?yàn)檫@個(gè)框架基于flask開(kāi)發(fā)的瞒渠。如何運(yùn)行起來(lái)呢歪脏?需要注意的是疑俭,這個(gè)應(yīng)用需要一個(gè)config.yaml 文件,再當(dāng)前目錄下新建一個(gè)文件config.yaml 婿失,因?yàn)閼?yīng)用啟動(dòng)會(huì)讀取這個(gè)配置文件
再終端輸入 python first_dock_app.py runserver,啟動(dòng)起來(lái)钞艇,默認(rèn)的主機(jī)和端口是0.0.0.0 端口是5000
可以指定主機(jī)和端口,可以寫(xiě)成

python first_dock_app.py runserver --host 127.0.0.1 --port 8090

這個(gè)框架在這命令行用到了docopt 模塊

關(guān)于Dock env

Dock的應(yīng)用會(huì)讀取一個(gè)格式為yaml的配置文件豪硅,當(dāng)創(chuàng)建DockApp或者DockEnv時(shí)哩照,會(huì)自動(dòng)在程序運(yùn)行的當(dāng)前目錄自動(dòng)加載config.yaml文件,如果沒(méi)有config.yaml懒浮,其會(huì)嘗試讀取config.template.yaml文件飘弧,并將其拷貝,重命名為config.yaml砚著,然后讀取次伶。
使用dockenv

from dock.common import dockenv

dockenv('') #初始化,得到config.file 的文件的絕對(duì)路徑稽穆,
在執(zhí)行:
config_object.set_target_object(YamlConfig(self.config_file).preload())  #config_object 是從globals.py 文件導(dǎo)入的

pyYAML

公司的配置文件用的都是yaml文件冠王,學(xué)習(xí)一下這個(gè)模塊
所安裝的模塊是pyYAML
導(dǎo)入

import yaml

關(guān)于yaml文件的格式

它的基本語(yǔ)法規(guī)則如下:

1、大小寫(xiě)敏感

2舌镶、使用縮進(jìn)表示層級(jí)關(guān)系

3柱彻、縮進(jìn)時(shí)不允許使用Tab鍵豪娜,只允許使用空格。

4绒疗、縮進(jìn)的空格數(shù)目不重要侵歇,只要相同層級(jí)的元素左側(cè)對(duì)齊即可

5、# 表示注釋吓蘑,從這個(gè)字符一直到行尾,都會(huì)被解析器忽略坟冲,這個(gè)和python的注釋一樣

1.數(shù)值直接以字面量的形式表示
number:12.30   #{'number':12.3}
2. 布爾值用true和false表示
isSet:true #{'isSet':True}
3.null用~表示
parent:~ # {'parent':None}
4.時(shí)間采用ISO8601格式
time1: 2001-12-14t21:59:43.10-05:00  #{'time1': datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)}
5.日期用iso8601格式的年磨镶、月、日 表示
date: 2017-07-31  #{'date': datetime.date(2017, 7, 31)}
6.YAML 允許使用兩個(gè)感嘆號(hào)健提,強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型
int_to_str:!!str 123   # {'int_to_str':'123'}

yaml 模塊的使用

使用很簡(jiǎn)單琳猫,兩個(gè)方法,load 和dump

    with open(f_path,'r') as f:
    c = yaml.load(f)

load()方法返回一個(gè)字典
dump() 方法返回一個(gè)字符串

a = yaml.dump({'name': "The Cloak 'Colluin'",   'depth': 5, 'rarity': 45,
'weight': 10, 'cost': 50000, 'flags': ['INT', 'WIS',    'SPEED', 'STEALTH']})
print(type(a)) 

關(guān)于dock的積木

Dock積木首先是一個(gè)python module私痹,其必須要包含一個(gè)init函數(shù)脐嫂,接收app作為參數(shù),需要返回多個(gè)Flask 藍(lán)圖對(duì)象紊遵,例如:

def init(app):
    from view import foo, bar
    #do something
    return [foo.blueprint, bar.blueprint]

Dock App提供了mount方法加載Dock積木账千,示例如下:

app.mount(dock_account, mapping={'account': '/<appname>', 'realtime':'/<appname>'})

其中dock_account是積木,mapping是對(duì)account積木的blueprint url路由增加前綴功能的暗膜。

對(duì)于Dock App匀奏,開(kāi)發(fā)時(shí)推薦采用dock-server 來(lái)運(yùn)行,在正式部署時(shí)学搜,可以用gunicorn來(lái)運(yùn)行娃善。

關(guān)于用dock-server 命令行運(yùn)行程序,需要注意的是在在模塊下面要有一個(gè)server.py文件瑞佩,必須是這個(gè)名字聚磺,這個(gè)是寫(xiě)的程序啟動(dòng)的入口(可以這么認(rèn)為)
目錄架構(gòu)如下圖:

├── dock_learn
│   ├── README.md
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── config.yaml
│   ├── hello.py
│   ├── hello.pyc
│   ├── jimu
│   ├── login.py
│   ├── login.pyc
│   ├── server.py
│   └── server.pyc

切換到dock_learn 所在目錄,type:

dock-server dock_learn.server -b 127.0.0.1:8070 -s simple

也可以

dock-server dock_learn

這樣啟動(dòng)的就是IP綁定的是0.0.0.0 端口是5000

server.py 文件里

#coding:utf-8
from dock.web import DockApp
from jimu import jimu1,jimu2

app = DockApp(__name__)
app.mount(jimu1, mapping={'hello': '/hello', 'realtime': '/<appname>'})
app.mount(jimu2)

這個(gè)文件主要是創(chuàng)建一個(gè)app ,初始化配置炬丸,將積木掛載到app中瘫寝,積木在上文已經(jīng)簡(jiǎn)單的介紹了。
關(guān)于積木有以下幾個(gè)要點(diǎn)


  • 必須是一個(gè)模塊
  • 模塊里必須有個(gè)init函數(shù)御雕,這個(gè)函數(shù)接受app參數(shù)矢沿,返回一個(gè)或多個(gè)flask 的blueprint 對(duì)象
  • 掛載積木
    app.mount(jimu1, mapping={'hello': '/hello', 'realtime': '/<appname>'})
    mapping接受一個(gè)字典,目的是提供一個(gè)url前綴的功能酸纲,字典的key 對(duì)應(yīng)藍(lán)圖的name

jimu1.py

#coding:utf-8

def init(app):
    from dock_learn import hello
    return [hello.blueprint]

hello.py

#coding:utf-8


from flask import Blueprint
import time


blueprint = Blueprint('hello', __name__)  #initialize a blueprint object

@blueprint.route('/')
def hello():
    return 'hello %s'% str(time.time())

@blueprint.route('/home')
def home():
    return 'welome to home'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捣鲸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闽坡,更是在濱河造成了極大的恐慌栽惶,老刑警劉巖愁溜,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異外厂,居然都是意外死亡冕象,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門汁蝶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渐扮,“玉大人,你說(shuō)我怎么就攤上這事掖棉∧孤桑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵幔亥,是天一觀的道長(zhǎng)耻讽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)帕棉,這世上最難降的妖魔是什么针肥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮香伴,結(jié)果婚禮上慰枕,老公的妹妹穿的比我還像新娘。我一直安慰自己瞒窒,他們只是感情好捺僻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著崇裁,像睡著了一般匕坯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拔稳,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天葛峻,我揣著相機(jī)與錄音,去河邊找鬼巴比。 笑死术奖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轻绞。 我是一名探鬼主播采记,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼政勃!你這毒婦竟也來(lái)了唧龄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奸远,失蹤者是張志新(化名)和其女友劉穎既棺,沒(méi)想到半個(gè)月后讽挟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丸冕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年耽梅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖烛。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眼姐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洪己,到底是詐尸還是另有隱情妥凳,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布答捕,位于F島的核電站,受9級(jí)特大地震影響屑那,放射性物質(zhì)發(fā)生泄漏拱镐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一持际、第九天 我趴在偏房一處隱蔽的房頂上張望沃琅。 院中可真熱鬧,春花似錦蜘欲、人聲如沸益眉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)郭脂。三九已至,卻和暖如春澈歉,著一層夾襖步出監(jiān)牢的瞬間展鸡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工埃难, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莹弊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓涡尘,卻偏偏與公主長(zhǎng)得像忍弛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子考抄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 22年12月更新:個(gè)人網(wǎng)站關(guān)停细疚,如果仍舊對(duì)舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,160評(píng)論 22 257
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)座泳,斷路器惠昔,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,441評(píng)論 6 428
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,501評(píng)論 25 707
  • [TOC]一直想做源碼閱讀這件事幕与,總感覺(jué)難度太高時(shí)間太少,可望不可見(jiàn)镇防。最近正好時(shí)間充裕啦鸣,決定試試做一下,并記錄一下...
    何柯君閱讀 7,174評(píng)論 3 98