Python之web开发

Dock框架学习

2018-01-11  本文已影响130人  11月的射手座

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中,积木在上文已经简单的介绍了。
关于积木有以下几个要点


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'
上一篇下一篇

猜你喜欢

热点阅读