04.uliweb更多话题介绍

37
Uliweb更多话题介绍

Upload: modou-li

Post on 15-Jul-2015

44 views

Category:

Software


5 download

TRANSCRIPT

Page 1: 04.uliweb更多话题介绍

Uliweb更多话题介绍

Page 2: 04.uliweb更多话题介绍

• wsgi

• middleware

• session

• cache

• 事务处理

• i18n

• MVVM集成

• 批处理

• use机制的实现

• app依赖

• 邮件发送

• 守护

• redis

• 文件上传

• rbac

• 信号机制

• 静态文件导出

• 部署

• generic代码框架生成

• 其它常用命令

Page 3: 04.uliweb更多话题介绍

WSGI

Page 4: 04.uliweb更多话题介绍

Uliweb应用结构uliweb应用

DebugApplication

Dispatcher

Middleware

Middleware

View

Page 5: 04.uliweb更多话题介绍

middlewareclass Middleware(object):

ORDER = 500

def __init__(self, application, settings):

self.application = application

self.settings = settings

def process_request(self, request):

def process_response(self, request, response):

def process_exception(self, request, e):

Page 6: 04.uliweb更多话题介绍

[MIDDLEWARES]

auth = ('uliweb.contrib.auth.middle_auth.AuthMiddle', 100)

transaction = 'uliweb.contrib.orm.middle_transaction.TransactionMiddle'

i18n = ('uliweb.contrib.i18n.middle_i18n.I18nMiddle', 500)

session = ('uliweb.contrib.session.middle_session.SessionMiddle', 50)

traceback =

('traceback_middleware.middle_traceback.TracebackMiddle', 40)

uliwebrecorder =

'uliweb.contrib.recorder.middle_recorder.RecorderrMiddle'

#transaction = 'uliweb.orm.middle_transaction.TransactionMiddle'

#orm_notfound = 'uliweb.orm.middle_notfound.ORMNotfoundMiddle'

urlfilter = 'rbac_man.middle_urlfilter.URLFilterMiddle'

sqlmonitor = 'uliweb.contrib.orm.middle_sqlmonitor.SQLMonitorMiddle'

Page 7: 04.uliweb更多话题介绍

session

• 使用时需要添加 uliweb.contrib.session

• 支持多种后端:数据库,文件,redis, memcache

• 通过middleware向request绑定一个session的对象,可以象dict一样使用

Page 8: 04.uliweb更多话题介绍

cache

• 使用和session一样的后端处理

• 可以通过 functions.get_cache()来获得一个cache对象

• cache.set(key, value, expire=60)

Page 9: 04.uliweb更多话题介绍

事务处理

• 通过TransactionMiddle对请求进行封装,调用前启动事务,调用后关闭事务

• 如果要手工执行事务,可以:from uliweb.orm import Begin, Commit, Rollback

Page 10: 04.uliweb更多话题介绍

I18N

• 需要配置uliweb.contrib.i18n

• 在程序中定义翻译函数from uliweb.i18n import ugettext_lazy as __(‘save’)

• 使用uliweb i18n命令抽取翻译串

• 使用poEdit工具将po翻译为mo文件

• 语言识别顺序,看文档

• 模板中使用 {{=_(‘save’)}}

Page 11: 04.uliweb更多话题介绍

MVVM集成

• angularjs

• avalonjs(推荐国产)

• 配置 plugs.ui.avalon

• 在模板中使用 {{use “avalon”}}

Page 12: 04.uliweb更多话题介绍

批处理

• 可以在项目的某个app下直接编写,如:

• def main(args, options, global_options):

#处理

• 调用时使用 uliweb call <文件名>

• 可以自动启动uliweb项目的实例

Page 13: 04.uliweb更多话题介绍

定义1

app/template_plugins/xxxx.py

def call(version=None):

from uliweb import settings

a = []

version = version or

settings.UI_CONFIG.angularjs_version

a.append('angularjs/%s/angular-%s.min.js' %

(version, version))

a.append('jsutils/json2.js')

return {'toplinks':a}

Page 14: 04.uliweb更多话题介绍

定义2

settings.ini

[TEMPLATE_USE]

zeroclipboard =

{'toplinks':['zeroclipboard/ZeroClipboard.m

in.js'],

'depends':['jquery']

}

use 也可以实现依赖

Page 15: 04.uliweb更多话题介绍

使用

use, link

{{use “avalon”}}

{{link “test.js”}}

‘uliweb.contrib.template’

<script type="text/javascript"

src="/static/avalon/avalon.js?ver=18"></script>

<script type="text/javascript"

src="/static/avalon/avalon_init.js?ver=18"></script>

Page 16: 04.uliweb更多话题介绍

模板继承的处理#layout.html

<html>

<head>

{{use "bootstrap"}}

</head>

<body>{{block content}}{{end}}</body>

</html>

#layout.html

{{extend “layout.html”}}

{{block content}}

{{use “avalon”}}

{{end}}

Page 17: 04.uliweb更多话题介绍

处理结果

#layout.html

<html>

<head>

{{use "bootstrap"}}

{{use “avalon”}}

</head>

<body>{{block content}}{{end}}</body>

</html>

Page 18: 04.uliweb更多话题介绍

config.ini

----------------------------------

[DEPENDS]

REQUIRED_APPS = [

'uliweb.contrib.template',

'uliweb.contrib.staticfiles',

'uliweb.contrib.generic',

'uliweb.contrib.upload',

'uliweb.contrib.flashmessage',

'uliweb.contrib.i18n',

'uliweb.contrib.orm',

'uliweb.contrib.auth',

]

APP依赖

Page 19: 04.uliweb更多话题介绍

邮件发送• 配置 uliweb.contrib.mail

• 添加mail服务相关的配置

• 支持:sendmail, smtp, gmail后端

def mail():

from uliweb.mail import Mail

Mail().send_mail('[email protected]', '[email protected]',

u'中文标题', u'中文内容')

return 'ok'

python -m smtpd -n -c DebuggingServer localhost:1025

Page 20: 04.uliweb更多话题介绍

程序方式启动项目实例

• from uliweb.manage import

make_simple_application

• app = make_simple_application(project_dir=‘.’)

• 然后可以调用apps中内容

Page 21: 04.uliweb更多话题介绍

守护

• 就是一个死循环

• 使用supervisord模块来管理守护

• 在循环中要注意Reset(),请数据库重连

Page 22: 04.uliweb更多话题介绍

redis• 是一个k/v的NOSQL数据库

• 支持缓存功能

• 支持持久化功能

• 性能高,单线程工作

• 有pub/sub功能

• 列表可以阻塞实现队列

• 支持丰富的数据结构

Page 23: 04.uliweb更多话题介绍

redis_cli

• 配置uliweb.contrib.redis_cli

• 可以自动连接一个缺省的redis服务器

• functions.get_redis()

Page 24: 04.uliweb更多话题介绍

文件上传

• 配置uliweb.contrib.upload

• 提供FileServing类,提供:上传后文件名转换,指定文件存储路径,获取文件下载URL,支持X-SendFile

机制

Page 25: 04.uliweb更多话题介绍

X-SendFile

Page 26: 04.uliweb更多话题介绍

rbac• 其于角色的用户管理

• 有角色表,权限表

• 提供对角色和权限的判断

• 提供缺省的角色

• 角色,权限以及角色与权限的关系可以定义在settings.ini

中,并可以使用 uliweb dbinit uliweb.contrib.rbac来导入

• 支持简单角色和动态角色

Page 27: 04.uliweb更多话题介绍

信号机制

• 有些象pub/sub

• 为了实现解耦

• 目前是同步调用

• dispatch.call()发出信号

• @bind(topic)

def function()

Page 28: 04.uliweb更多话题介绍

ORM的信号

• post_save

• pre_save

• post_delete

• pre_delete

Page 29: 04.uliweb更多话题介绍

静态文件导出

• uliweb exportstatic ../static

Page 30: 04.uliweb更多话题介绍

部署

• nginx 反向代理

• uwsgi python容器

• supervisor 进程管理工具

• redis 缓存

• mysql 数据库

• 使用uliweb config快速生成部署文件模板

Page 31: 04.uliweb更多话题介绍

generic代码框架生成

• 配置uliweb.contrib.generic

• 执行uliweb generic

generic_app_blog>uliweb generic

Appname:blog

Table Name:blog

Creation Theme([a]ngularjs, [h]tml), [e]sayui)[a]:h

View Class Name [BlogView]:

Save views to [views_blog.py]:

Class View URL prefix [/blog]:

Enable pagination(Y/n/q)[Y]:

Enable query(Y/n/q)[Y]:n

Enable download(Y/n/q)[Y]:n

Add View using popup(Y/n/q)[Y]:n

Add View using ajax(Y/n/q)[Y]:n

Edit View using popup(Y/n/q)[Y]:n

Edit View using ajax(Y/n/q)[Y]:n

Delete View using ajax(Y/n/q)[Y]:

Page 32: 04.uliweb更多话题介绍

其它常用命令

Page 33: 04.uliweb更多话题介绍

uliweb find

• 查找模板

• 查找URL

• 查找静态文件

• 查找Model

• 查找配置项

Page 34: 04.uliweb更多话题介绍

ORM常用命令

• syncdb新建表

• sqlshell 进入数据库命令行

• sql 显示create语句

• sqldot 生成dot文件

• sqlhtml 生成文档

• load, reset, dump

Page 35: 04.uliweb更多话题介绍

makecmd

• 创建app下的命令

• 支持子命令

Page 36: 04.uliweb更多话题介绍

recorder

• 记录操作

• 可以回放

Page 37: 04.uliweb更多话题介绍

Q&A