Dock框架学习

DOCK 框架学习

  1. download and install
  2. 简单使用h ello world

download & install

从gitlab上下载dock代码,cd 到setup.py那个目录下,执行,python setup.py develop

note:需要python2  commnad line tools 

安装完成后,再执行pip list 会看到一个有Dock 的package
这些操作建议使用虚拟环境 virtualenv
以上步骤执行完就安装成功了

简单使用 hello world

新建一个文件 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()

写法和flask基本一样,因为这个框架基于flask开发的。如何运行起来呢?需要注意的是,这个应用需要一个config.yaml 文件,再当前目录下新建一个文件config.yaml ,因为应用启动会读取这个配置文件
再终端输入 python first_dock_app.py runserver,启动起来,默认的主机和端口是0.0.0.0 端口是5000
可以指定主机和端口,可以写成

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

这个框架在这命令行用到了docopt 模块

关于Dock env

Dock的应用会读取一个格式为yaml的配置文件,当创建DockApp或者DockEnv时,会自动在程序运行的当前目录自动加载config.yaml文件,如果没有config.yaml,其会尝试读取config.template.yaml文件,并将其拷贝,重命名为config.yaml,然后读取。
使用dockenv

from dock.common import dockenv

dockenv('') #初始化,得到config.file 的文件的绝对路径,
在执行:
config_object.set_target_object(YamlConfig(self.config_file).preload())  #config_object 是从globals.py 文件导入的

pyYAML

公司的配置文件用的都是yaml文件,学习一下这个模块
所安装的模块是pyYAML
导入

import yaml

关于yaml文件的格式

它的基本语法规则如下:

1、大小写敏感

2、使用缩进表示层级关系

3、缩进时不允许使用Tab键,只允许使用空格。

4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

5、# 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

1.数值直接以字面量的形式表示
number:12.30   #{'number':12.3}
2. 布尔值用true和false表示
isSet:true #{'isSet':True}
3.null用~表示
parent:~ # {'parent':None}
4.时间采用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 允许使用两个感叹号,强制转换数据类型
int_to_str:!!str 123   # {'int_to_str':'123'}

yaml 模块的使用

使用很简单,两个方法,load 和dump

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

load()方法返回一个字典
dump() 方法返回一个字符串

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

关于dock的积木

Dock积木首先是一个python module,其必须要包含一个init函数,接收app作为参数,需要返回多个Flask 蓝图对象,例如:

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是对account积木的blueprint url路由增加前缀功能的。

对于Dock App,开发时推荐采用dock-server 来运行,在正式部署时,可以用gunicorn来运行。

关于用dock-server 命令行运行程序,需要注意的是在在模块下面要有一个server.py文件,必须是这个名字,这个是写的程序启动的入口(可以这么认为)
目录架构如下图:

├── 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

这样启动的就是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)

这个文件主要是创建一个app ,初始化配置,将积木挂载到app中,积木在上文已经简单的介绍了。
关于积木有以下几个要点


  • 必须是一个模块
  • 模块里必须有个init函数,这个函数接受app参数,返回一个或多个flask 的blueprint 对象
  • 挂载积木
    app.mount(jimu1, mapping={'hello': '/hello', 'realtime': '/<appname>'})
    mapping接受一个字典,目的是提供一个url前缀的功能,字典的key 对应蓝图的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'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容