04.uliweb更多话题介绍
TRANSCRIPT
![Page 1: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/1.jpg)
Uliweb更多话题介绍
![Page 2: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/2.jpg)
• wsgi
• middleware
• session
• cache
• 事务处理
• i18n
• MVVM集成
• 批处理
• use机制的实现
• app依赖
• 邮件发送
• 守护
• redis
• 文件上传
• rbac
• 信号机制
• 静态文件导出
• 部署
• generic代码框架生成
• 其它常用命令
![Page 3: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/3.jpg)
WSGI
![Page 4: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/4.jpg)
Uliweb应用结构uliweb应用
DebugApplication
Dispatcher
Middleware
Middleware
View
![Page 5: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/5.jpg)
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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/6.jpg)
[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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/7.jpg)
session
• 使用时需要添加 uliweb.contrib.session
• 支持多种后端:数据库,文件,redis, memcache
• 通过middleware向request绑定一个session的对象,可以象dict一样使用
![Page 8: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/8.jpg)
cache
• 使用和session一样的后端处理
• 可以通过 functions.get_cache()来获得一个cache对象
• cache.set(key, value, expire=60)
![Page 9: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/9.jpg)
事务处理
• 通过TransactionMiddle对请求进行封装,调用前启动事务,调用后关闭事务
• 如果要手工执行事务,可以:from uliweb.orm import Begin, Commit, Rollback
![Page 10: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/10.jpg)
I18N
• 需要配置uliweb.contrib.i18n
• 在程序中定义翻译函数from uliweb.i18n import ugettext_lazy as __(‘save’)
• 使用uliweb i18n命令抽取翻译串
• 使用poEdit工具将po翻译为mo文件
• 语言识别顺序,看文档
• 模板中使用 {{=_(‘save’)}}
![Page 11: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/11.jpg)
MVVM集成
• angularjs
• avalonjs(推荐国产)
• 配置 plugs.ui.avalon
• 在模板中使用 {{use “avalon”}}
![Page 12: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/12.jpg)
批处理
• 可以在项目的某个app下直接编写,如:
• def main(args, options, global_options):
#处理
• 调用时使用 uliweb call <文件名>
• 可以自动启动uliweb项目的实例
![Page 13: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/13.jpg)
定义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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/14.jpg)
定义2
settings.ini
[TEMPLATE_USE]
zeroclipboard =
{'toplinks':['zeroclipboard/ZeroClipboard.m
in.js'],
'depends':['jquery']
}
use 也可以实现依赖
![Page 15: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/15.jpg)
使用
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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/16.jpg)
模板继承的处理#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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/17.jpg)
处理结果
#layout.html
<html>
<head>
{{use "bootstrap"}}
{{use “avalon”}}
</head>
<body>{{block content}}{{end}}</body>
</html>
![Page 18: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/18.jpg)
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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/19.jpg)
邮件发送• 配置 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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/20.jpg)
程序方式启动项目实例
• from uliweb.manage import
make_simple_application
• app = make_simple_application(project_dir=‘.’)
• 然后可以调用apps中内容
![Page 21: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/21.jpg)
守护
• 就是一个死循环
• 使用supervisord模块来管理守护
• 在循环中要注意Reset(),请数据库重连
![Page 22: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/22.jpg)
redis• 是一个k/v的NOSQL数据库
• 支持缓存功能
• 支持持久化功能
• 性能高,单线程工作
• 有pub/sub功能
• 列表可以阻塞实现队列
• 支持丰富的数据结构
![Page 23: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/23.jpg)
redis_cli
• 配置uliweb.contrib.redis_cli
• 可以自动连接一个缺省的redis服务器
• functions.get_redis()
![Page 24: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/24.jpg)
文件上传
• 配置uliweb.contrib.upload
• 提供FileServing类,提供:上传后文件名转换,指定文件存储路径,获取文件下载URL,支持X-SendFile
机制
![Page 25: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/25.jpg)
X-SendFile
![Page 26: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/26.jpg)
rbac• 其于角色的用户管理
• 有角色表,权限表
• 提供对角色和权限的判断
• 提供缺省的角色
• 角色,权限以及角色与权限的关系可以定义在settings.ini
中,并可以使用 uliweb dbinit uliweb.contrib.rbac来导入
• 支持简单角色和动态角色
![Page 27: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/27.jpg)
信号机制
• 有些象pub/sub
• 为了实现解耦
• 目前是同步调用
• dispatch.call()发出信号
• @bind(topic)
def function()
![Page 28: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/28.jpg)
ORM的信号
• post_save
• pre_save
• post_delete
• pre_delete
![Page 29: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/29.jpg)
静态文件导出
• uliweb exportstatic ../static
![Page 30: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/30.jpg)
部署
• nginx 反向代理
• uwsgi python容器
• supervisor 进程管理工具
• redis 缓存
• mysql 数据库
• 使用uliweb config快速生成部署文件模板
![Page 31: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/31.jpg)
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更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/32.jpg)
其它常用命令
![Page 33: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/33.jpg)
uliweb find
• 查找模板
• 查找URL
• 查找静态文件
• 查找Model
• 查找配置项
![Page 34: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/34.jpg)
ORM常用命令
• syncdb新建表
• sqlshell 进入数据库命令行
• sql 显示create语句
• sqldot 生成dot文件
• sqlhtml 生成文档
• load, reset, dump
![Page 35: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/35.jpg)
makecmd
• 创建app下的命令
• 支持子命令
![Page 36: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/36.jpg)
recorder
• 记录操作
• 可以回放
![Page 37: 04.uliweb更多话题介绍](https://reader031.vdocuments.net/reader031/viewer/2022020307/55a5c7421a28abe16d8b477d/html5/thumbnails/37.jpg)
Q&A