SlideShare a Scribd company logo
1 of 66
Uliweb 比较与实践 -2013
李迎辉 (limodou@gmail.com)
2013/11/25
2013 年个人小结
Uliweb 与其它框架比较
Uliweb 的特殊功能介绍
2013 年个人小结
Uliweb 与其它框架比较
Uliweb 的特殊功能介绍
•
•
•
•
•
•
•
•
•

Uliweb 发布到 0.2.2
par 发布到 0.9.3 , parm 发布到 0.6
Win32-Process-Watcher 发布
定制 alembic 并与 Uliweb 集成
chatroom 实验使用 Uliweb+gevnet-socketio 写
的 websocket 的聊天程序 , wshell-web shell
desktopnotify js 库,可以调浏览器 notification
API
对 mmGrid 添加树,优化多行表头,无限翻页等
功能
尝试 python3 ,创建 2to6 项目
参加何家胜组织的 codepark 编程公园活动,组
织了 3 次全天的编程活动
2013 年个人小结
Uliweb 与其它框架比较
Uliweb 的特殊功能介绍
怎么理解框架?我们需要框架吗?
( 软件 ) 框架是经验的总结
框架是把设计思想 ( 模式 ) 、开发习
惯、常见功能组织在一起的一种 **
软件 **
使用框架要按框架的要求来组织代码
,让框架来调
使用库则是由你来组织如何使用
使用框架表示你可能认同它的设计思
想
我们需要框架吗?
http://wiki.woodpecker.org.cn/moin/FrameworksShow
http://simple-is-better.com/news/309
第一个版本发布时间
第一个版本发布时间

8
2011.1 (1.0)

3
2008.12 (0.31)

6
2010.4 (0.1)

4
2009.10 (0.0.1)

时间

1
2005.11 (0.90)

2
2007.10 (1.8)

4
2009.10 (0.5.3)

7
2010.07 (1.0.0)
V
S
组织方式
组织方式

APP

自由,通过 Blueprint 来实现
APP 类似的功能

自由

APP

时间 - 组织
配置文件
配置文件

settings.py

自由 , 多种格式

支持,要先定义, py 文件

settings.ini, local_setings.ini,
app 级别 settings.ini

时间 - 组织 - 配置文件
配置文件语法
配置文件语法

变量大写, Python 语法

变量大写, Python 语法,支持
类的写法

Python 语法

大小写都可以, Python 语法

时间 - 组织 - 配置文件
程序结构的创建
程序结构的创建

makeproject

手工

手工

makeproject, makeapp

时间 - 组织 - 配置文件 - 项 目
URL 的定义
URL 的定义

集中式, urls.py ,可以
include ,正则式
在程序中分散定义,使用
decorator ,非正则

主程序中集中定义,正则式

在 views.py 中分散定义,使用
decorator ,同 flask

时间 - 组织 - 配置文件 - 项 目 -URL
URL 的反向获取
URL 的反向获取

提供 url_for ,按名字获取

url_for, 按名字获取

reverse_url ,按名字

提供 url_for , url_for_static ,
按名字获取

时间 - 组织 - 配置文件 - 项 目 -URL
模板
模板

支持 block ,代码受限,可以定
义 filter, tag
jinjia2 ,类 django 模块,代码
限制较小
类 django ,但是可以嵌入
python 表达式,导入等
从 web2py 改造而来,支持
block ,可以直接嵌入
python , pass 表示缩近结束

时间 - 组织 - 配置文件 - 项 目 -URL- 模板
模板文件关联
模板文件关联

在 render_to_template 中指定

在 render_template 中指定

render 中指定
自动套用函数,返回值为 dict
时或方法名或
response.template 中指定或
expose 中 template

时间 - 组织 - 配置文件 - 项 目 -URL- 模板
View 方法
View 方法

函数和类,一个类只处理一个
URL ,需要从基类继承
函数 , 类 ( 需要从基类继承 ), 没
有对类的 decorator 的修饰函数
,一个类只处理一个 URL
类,一个类只处理一个 URL ,
需要从基类继承
函数和类,一个类可以处理多
个 URL 。可以在类方法上加
expose, 不需要特殊基类

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View
常用对象的引用
常用对象的引用

request 是作为第一个参数

导入

绑定在类上

自动注入和导入

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象
Form 处理
Form 处理

内置

不提供,需要使用 WTForms

不提供

内置

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form
ORM
ORM

内置,自已实现

不直接提供,通过 FlaskSQLAlchemy

不提供

内置,基于 SQLAlchemy 实现

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form-ORM
数据库迁移
数据库迁移

间接通过 south

不提供

不提供

间接,集成了 alembic

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form-ORM
i18n
i18n

支持,通过 xgettext 提取

支持,通过 babel 处理

支持,通过 xgettext 提取

支持,通过修改 pygettext.py

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form-i18n
命令行工具
命令行工具

提供,可以按 app 来自定义

第三方

无

提供,可以按 app 来自定义

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form-i18n-CMD
异步处理支持
异步处理支持

第三方

第三方

内置

第三方

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form-i18n-CMD- 异步
websocket
websocket

第三方

第三方

内置

第三方

时间 - 组织 - 配置文件 - 项 目 -URL- 模板 -View- 常用对 象 -Form-i18n-CMD- 异步
比较总结(一)
比较总结(一)
比较 内容

APP

Flask

Free/Blueprint

Tornado

Uliweb

配置文件

py

多种

py

ini

配置文件语法

py

py

py

py

程序结构创建

cmd
集中

分散

集中

cmd
分散

√
继承,受限

√
继承,自由

√
继承,自由

手动

手动

组织方式

URL 定义
URL 反向获取
模板
模板调用
View
Url/View-Class
request 等对象

Django

√
继承 , 受限
手动
函数 / 类

函数 / 类

1:1
参数

1:1
导入

类
1:1
绑定类

APP

套用 / 手动
函数 / 类
n:1
注入 / 导入

Form

√

√

ORM

√

√
比较总结(二)
比较总结(二)
比较 内容

数据库迁移
i18n
命令行工具

Django

Flask

Tornado

-/south
√

Uliweb
-/Alembic

√

√

√

√
√

异步处理

√

websocket

√
2013 年个人小结
Uliweb 与其它框架比较
Uliweb 的特殊功能介绍
API
API
• 如何简单提供统一的 API 的
定义和使用方式?
functions
[FUNCTIONS]
get_model = 'uliweb.orm.get_model'
get_object = 'uliweb.orm.get_object'
set_echo = 'uliweb.orm.set_echo'
from uliweb import functions
User = functions.get_model(‘user’)
Model
Model
• Model 能替換吗?
• Model 变了怎么方便处理?
• 如何方便调试?
配置化
[MODELS]
wikipage = 'wiki.models.WikiPage'
wikichangeset = 'wiki.models.WikiChangeSet'
get_model()
from uliweb import functions
User = functions.get_model(‘user’)
命令行
uliweb syncdb -v
[default]
[default]
[default]
[default]
[default]
[default]

Creating
Creating
Creating
Creating
Creating
Creating

[1/40,
[2/40,
[3/40,
[4/40,
[5/40,
[6/40,

blog] blog_category...EXISTED
blog] blog...EXISTED
blog] blog_blog_tag_tags...EXISTED
blog] blog_tag...EXISTED
classes] class_teacher...EXISTED
classes] class_info...EXISTED
命令行
uliweb dump [appname,…]
uliweb dumptable tablename[, tablename]
uliweb reset [appname,…]
uliewb resettable tablename[, tablename]
uliweb load [appname,…]
uliewb loadtable tablename[, tablename]
命令行
uliweb sql
uliweb sqltable
CREATE TABLE forumcategory (
name VARCHAR(100),
description TEXT,
ordering INTEGER,
created_on DATETIME,
updated_on DATETIME,
id INTEGER NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
)CHARSET=utf8;
命令行
uliweb sqlhtml
命令行
uliweb sqldot
Alembic 集成
uliweb alembic init
uliweb alembic diff
uliweb alembic upgrade
调试
set_echo
functions.set_echo(True, time=0.001, explain=True)
===>>> (d:/project/mywork/uliweb-git/uliweb/utils/generic:1916:objects)
SELECT tutorials.title, tutorials.creator, tutorials.create_date, ...,
tutorials.comments_count, tutorials.id
FROM tutorials
WHERE tutorials.deleted = false ORDER BY tutorials.modified_date DESC
LIMIT 0, 10
---Explain: id=1L, select_type=u'SIMPLE', table=u'tutorials', type=u'ALL',
possible_keys=None, key=None, key_len=None, ref=None, rows=8L,
Extra=u'Using where; Using filesort',
===<<< time used 0.024000s
调试
SQLMonitorMiddle
[MIDDLEWARES]
sqlmonitor =
'uliweb.contrib.orm.middle_sqlmonitor.SQLMonitorMiddle‘
[ORM]
SQL_MONITOR = True
======
SELECT
t...
SELECT
tu...
SELECT
use...

sql execution count 10 </tutorial> =======
tutorials.title, tutorials.creator, tutorials.create_date,
1 0.100
count(tutorials.id) AS tbl_row_count FROM tutorials WHERE
2 0.002
user.username, user.nickname, user.email, user.password,
7 0.012
模板
模板
• 如何方便引用外部资源,不
想写 <script> 或 <link>
• 在模板继承时,如何处理新
増资源
• 模板如何调试?继承,查找
?
定义 1
app/template_plugins/xxxx.py

def call(app, var, env, 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}
定义 2
settings.ini

[TEMPLATE_USE]
avalon = {'toplinks':['avalon/avalon.js',
'avalon/avalon_init.js']}
使用
use, link
‘uliweb.contrib.template’
{{use “avalon”}}
{{link “test.js”}}

<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>
模板继承的处理
#layout.html
<html>
<head>
{{use "bootstrap"}}
</head>
<body>{{block content}}{{end}}</body>
</html>
#layout.html
{{extend “layout.html”}}
{{block content}}
{{use “avalon”}}
{{end}}
处理结果
#layout.html
<html>
<head>
{{use "bootstrap"}}
{{use “avalon”}}
</head>
<body>{{block content}}{{end}}</body>
</html>
命令行调式
uliweb find –t template

D:projectccctasks-master>uliweb find -t index.html
apps/newportal/templates/index.html
apps/myportal/templates/index.html
apps/Portal/templates/index.html
命令行调式
uliweb find –t template --tree
D:projectccctasks-master>uliweb find -t index.html --tree
apps/newportal/templates/index.html
-------------- Tree -------------apps/theme/templates/theme/skeleton.html
(extend)apps/theme/templates/theme/zebra.html
-----------> (extend)apps/newportal/templates/index.html
(include)apps/theme/templates/include/inc_userinfo.html
(include)apps/theme/templates/include/inc_checklogin.html
(include)apps/theme/templates/theme/utils.html
(include)d:/project/mywork/plugsgit/plugs/ui/jquery/pnotify/templates/
inc_show_flashes.html
命令行调式
uliweb find –t template–block –with-filename
-------------- Blocks -------------title
(apps/theme/templates/theme/zebra.html)
meta
(apps/theme/templates/theme/skeleton.html)
_css
(apps/newportal/templates/index.html)
body_class
(apps/newportal/templates/index.html)
before_header
(apps/theme/templates/theme/skeleton.html)
header
(apps/theme/templates/theme/zebra.html)
header_extra_class
(apps/theme/templates/theme/zebra.html)
CSS, JS 合并
初始
<link href="/static/bootstrap/2.2.0/bootstrap.min.css?ver=18"/>
<script src="/static/bootstrap/2.2.0/js/bootstrap.min.js?ver=18"></script>
<link href="/static/jquery/ui/css/redmond/jquery-ui-1.8.16.custom.css?
ver=18"/>
<script src="/static/jquery/ui/js/jquery-ui-1.8.16.custom.min.js?
ver=18"></script>
<script src="/static/jquery/ui/js/jquery.ui.datepicker.zh.js?ver=18"></script>
<link href="/static/theme/blove/index.css?ver=18"/>
<script src="/static/jqutils/jquery.cookie.js?ver=18"></script>
<link href="/static/poshytip/tip-twitter/tip-twitter.css?ver=18"/>
CSS, JS 合并
配置
[STATIC_COMBINE]
1 = ['jquery/jquery-1.7.2.min.js', 'jsutils/json2.js']
#jquitls
2 = ['jquery/ui/js/jquery-ui-1.8.16.custom.min.js',
'jquery/ui/js/jquery.ui.datepicker.zh.js',
'jsmenu/menu.js',
'poshytip/jquery.poshytip.js',
'jqutils/jqrselect.js',
'jqutils/jqutils.js',
'jqutils/jquery.hotkeys.js',
'jqutils/jquery.form.js',
'pnotify/1.2.0/jquery.pnotify.min.js',
]
CSS, JS 合并
uliweb exportstatic –auto static
<link href="/static/_cmb_3ab42e4ed430d339f6390330aa3e77b7.css?ver=15"/>
<script src="/static/_cmb_9ed3a8d3597e13abdd529ea9d4e6270f.js?
ver=15"></script>
<link href="/static/_cmb_88466a4a9313f6857d61aa632abf5054.css?ver=15"/>
<script src="/static/_cmb_c8a04bdfa7d2195d5f05c76a87a8767a.js?
ver=15"></script>
Generic
Generic
• 如何快速处理 CRUD
操作流程定义为类
AddView
EditView
DetailView
DeleteView
ListView
…
操作流程定义为类
AddView
@expose(‘/blog’)
class BlogAdd(object):
def add(self):
Blog = functions.get_model(‘blog’)
def get_url(id):
return url_for(self.__class__.list)
view = functions.AddView(Blog, ok_url=get_url)
return view.run()
操作流程定义为类
form = make_form(Model) # 根据 Model 自动生成 Form
if method == ‘GET’:
return {‘form’:form}# 显示页面
else: #POST
if form.validate(request.values): # 表单校验
# 成功
save() # 保存数据
return redirect(ok_url) # 成功后跳转
else:
return {‘form’:form} # 带有出错信息返回

显示

校验

成功

出错
通过参数与回调来进行控制
class AddView(object):
def __init__(self, model, ok_url=None, ok_template=None, form=None,
success_msg=None, fail_msg=None, use_flash=True,
data=None, default_data=None, fields=None, form_cls=None,
form_args=None, static_fields=None, hidden_fields=None,
pre_save=None, post_save=None, post_created_form=None,
layout=None, file_replace=True, template_data=None,
success_data=None, fail_data=None, meta='AddForm',
get_form_field=None, post_fail=None, types_convert_map=None,
fields_convert_map=None, json_func=None,
file_convert=True, upload_to=None, upload_to_sub=None,
fileserving_config='UPLOAD', protect=False, protect_field_name=None):
自动生成代码框架
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]:
生成的目录及文件
├─apps
│ ├─blog
│ │ ├─static
│ │ └─templates
│ │ │
└─BlogView
│ │ │
├─add.html
│ │ │
├─edit.html
│ │ │
├─list.html
│ │ │
└─view.html
│ │ └─views_blog.py
欢迎使用 Uliweb
欢迎使用 Uliweb
谢谢
邮件列表  https://groups.google.com/forum/#!forum/uliweb
论
坛  http://uliweb.clkg.org
文
档 http://limodou.github.io/uliweb-doc/
QQ
群 162487035
邮箱: limodou@gmail.com
微博: http://weibo.com/u/1689940061

More Related Content

What's hot

COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南Shengyou Fan
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterBo-Yi Wu
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniterBo-Yi Wu
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORMShengyou Fan
 
Automate with Ansible basic (2/e)
Automate with Ansible basic (2/e)Automate with Ansible basic (2/e)
Automate with Ansible basic (2/e)Chu-Siang Lai
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練Joseph Chiang
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探Anson Yang
 
應用程式部署
應用程式部署應用程式部署
應用程式部署Shengyou Fan
 
Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0yiditushe
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月鍾誠 陳鍾誠
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 
程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號鍾誠 陳鍾誠
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用Shengyou Fan
 

What's hot (20)

CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniter
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 
Automate with Ansible basic (2/e)
Automate with Ansible basic (2/e)Automate with Ansible basic (2/e)
Automate with Ansible basic (2/e)
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練YUI 教學 - 前端工程開發實務訓練
YUI 教學 - 前端工程開發實務訓練
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探
 
應用程式部署
應用程式部署應用程式部署
應用程式部署
 
Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月
 
Vue.js
Vue.jsVue.js
Vue.js
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
ev2oik
ev2oikev2oik
ev2oik
 

Viewers also liked

Algebra I Warm-ups
Algebra I Warm-upsAlgebra I Warm-ups
Algebra I Warm-upsguest3ce8ee0
 
Uliweb框架思想与编程
Uliweb框架思想与编程Uliweb框架思想与编程
Uliweb框架思想与编程modou li
 
02.uliweb开发入门
02.uliweb开发入门02.uliweb开发入门
02.uliweb开发入门modou li
 
01.uliweb介绍
01.uliweb介绍01.uliweb介绍
01.uliweb介绍modou li
 
02.python基础
02.python基础02.python基础
02.python基础modou li
 
04.uliweb更多话题介绍
04.uliweb更多话题介绍04.uliweb更多话题介绍
04.uliweb更多话题介绍modou li
 
01.python介绍
01.python介绍01.python介绍
01.python介绍modou li
 
03.python工作环境
03.python工作环境03.python工作环境
03.python工作环境modou li
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇modou li
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1modou li
 
03.uliweb开发进阶
03.uliweb开发进阶03.uliweb开发进阶
03.uliweb开发进阶modou li
 
Uliweb 快速易用的Python Web Framework
Uliweb 快速易用的Python Web FrameworkUliweb 快速易用的Python Web Framework
Uliweb 快速易用的Python Web Frameworkmodou li
 
Or Sam Opiates &amp; Opioids 04 19 2011
Or Sam Opiates &amp; Opioids 04 19 2011Or Sam Opiates &amp; Opioids 04 19 2011
Or Sam Opiates &amp; Opioids 04 19 2011bardlomlarry
 
Pregnancy with beta thalassemia
Pregnancy with beta thalassemiaPregnancy with beta thalassemia
Pregnancy with beta thalassemiamamuni00g2
 
MANAGEMENT OF HYPEREMESIS GRAVIDARUM
    MANAGEMENT OF HYPEREMESIS GRAVIDARUM    MANAGEMENT OF HYPEREMESIS GRAVIDARUM
MANAGEMENT OF HYPEREMESIS GRAVIDARUMmamuni00g2
 
HR practices in infosys
HR practices in infosysHR practices in infosys
HR practices in infosysBhasker Rajan
 
Stratégie digital-cci-rennes-btob-btoc-2013
Stratégie digital-cci-rennes-btob-btoc-2013Stratégie digital-cci-rennes-btob-btoc-2013
Stratégie digital-cci-rennes-btob-btoc-2013Gregoire Lockhart
 
"Génération Y, de A à Z" par MEC Paris
"Génération Y, de A à Z" par MEC Paris"Génération Y, de A à Z" par MEC Paris
"Génération Y, de A à Z" par MEC ParisagenceMEC
 

Viewers also liked (20)

Algebra I Warm-ups
Algebra I Warm-upsAlgebra I Warm-ups
Algebra I Warm-ups
 
Uliweb框架思想与编程
Uliweb框架思想与编程Uliweb框架思想与编程
Uliweb框架思想与编程
 
02.uliweb开发入门
02.uliweb开发入门02.uliweb开发入门
02.uliweb开发入门
 
01.uliweb介绍
01.uliweb介绍01.uliweb介绍
01.uliweb介绍
 
02.python基础
02.python基础02.python基础
02.python基础
 
04.uliweb更多话题介绍
04.uliweb更多话题介绍04.uliweb更多话题介绍
04.uliweb更多话题介绍
 
01.python介绍
01.python介绍01.python介绍
01.python介绍
 
03.python工作环境
03.python工作环境03.python工作环境
03.python工作环境
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
 
03.uliweb开发进阶
03.uliweb开发进阶03.uliweb开发进阶
03.uliweb开发进阶
 
Uliweb 快速易用的Python Web Framework
Uliweb 快速易用的Python Web FrameworkUliweb 快速易用的Python Web Framework
Uliweb 快速易用的Python Web Framework
 
Or Sam Opiates &amp; Opioids 04 19 2011
Or Sam Opiates &amp; Opioids 04 19 2011Or Sam Opiates &amp; Opioids 04 19 2011
Or Sam Opiates &amp; Opioids 04 19 2011
 
Pregnancy with beta thalassemia
Pregnancy with beta thalassemiaPregnancy with beta thalassemia
Pregnancy with beta thalassemia
 
MANAGEMENT OF HYPEREMESIS GRAVIDARUM
    MANAGEMENT OF HYPEREMESIS GRAVIDARUM    MANAGEMENT OF HYPEREMESIS GRAVIDARUM
MANAGEMENT OF HYPEREMESIS GRAVIDARUM
 
Loreal case study
Loreal case studyLoreal case study
Loreal case study
 
HR practices in infosys
HR practices in infosysHR practices in infosys
HR practices in infosys
 
Programme du PLFI 2013
Programme du PLFI 2013 Programme du PLFI 2013
Programme du PLFI 2013
 
Stratégie digital-cci-rennes-btob-btoc-2013
Stratégie digital-cci-rennes-btob-btoc-2013Stratégie digital-cci-rennes-btob-btoc-2013
Stratégie digital-cci-rennes-btob-btoc-2013
 
"Génération Y, de A à Z" par MEC Paris
"Génération Y, de A à Z" par MEC Paris"Génération Y, de A à Z" par MEC Paris
"Génération Y, de A à Z" par MEC Paris
 

Similar to Uliweb比较与实践 2013

Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
quick_orm 简介
quick_orm 简介quick_orm 简介
quick_orm 简介tyler4long
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2twMVC
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC
 
Uliweb设计分享
Uliweb设计分享Uliweb设计分享
Uliweb设计分享modou li
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001rainx1982
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架fangdeng
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架wtxidian
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsChieh Lin
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
跟我一起學 CakePHP
跟我一起學 CakePHP跟我一起學 CakePHP
跟我一起學 CakePHPRay Wei
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发leneli
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVCjeffz
 

Similar to Uliweb比较与实践 2013 (20)

Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
quick_orm 简介
quick_orm 简介quick_orm 简介
quick_orm 简介
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
 
Uliweb设计分享
Uliweb设计分享Uliweb设计分享
Uliweb设计分享
 
Kissy design
Kissy designKissy design
Kissy design
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
跟我一起學 CakePHP
跟我一起學 CakePHP跟我一起學 CakePHP
跟我一起學 CakePHP
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
 

Recently uploaded

003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdfshanshanhui1
 
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...黑客 接单【TG/微信qoqoqdqd】
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制kathrynalvarez364
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单jakepaige317
 
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书kathrynalvarez364
 
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptxJAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptxCHANSUITNEEMoe
 
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书kathrynalvarez364
 
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制gravestomas0
 
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxGrade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxPriscilleXu
 
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制bairnshajjes
 

Recently uploaded (10)

003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
 
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
 
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
 
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptxJAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
 
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
 
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
 
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxGrade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptx
 
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
 

Uliweb比较与实践 2013

Editor's Notes

  1. 2013年小结:介绍2013年uliweb的发展及去我做过的一些事情 uliweb与其它框架比较:了解uliweb与常见其它框架之间的差异,为了更好的理解它们的设计与进行选择。选择了几个有代表性的框架 特殊功能主要是介绍:uliweb一些有代表性的功能设计
  2. 我们常说的框架,其实是软件框架,所以它首先是软件。 框架里面有什么? 框架和库的区别? 为什么要有框架?
  3. 我个人的答案是需要,但是如果没有合适的框架,那我们就创建一个出来
  4. 这里我们主要比较:设计,常见功能 不同的框架产生的时间,背景,思念都不相同 比较可以了解框架间的差异,从而体会不同的设计思想,重点强调Uliweb的设计细节 单纯的对比可能比较生硬,因此也有类似的代码间的比较 FramewoksShow是比较早期,参与人很少 TODO比较是自发的,可以大概了解不同的语言实现TODO的过程
  5. APP的组织方式表示按模块来组织程序结构。自由并不表示不是模块化的,只不过可能会缺省一些针对APP的支持。同时,APP方式一般结构是固定的,如:static, templates目录的约定。django, uliweb都是配置化的,而Flask, Tornado都是要在程序中写的。
  6. Uliweb是ini方式的,所以有section将配置信息分组。其它的不分组。
  7. 分散定义的好处是为了方便复用
  8. 分散定义的好处是为了方便复用
  9. 这里方法是指当view是类时的情况。类则作为模板子目录。
  10. 自动注入是指view函数。导入是一般函数。uliweb还提供了如json, redirect等的注入。
  11. Form是指类似于django.Form, WTForms这样的库
  12. django的模板中使用i18n是使用 trans 标签,其它的都支持 _() 函数
  13. 通过functions实现定义与使用相分离
  14. 统一函数提供了使用和定义相分离
  15. 绿色:调用的参数 红色:调者文件位置及函数 紫色:explain输出 记录了执行时间大于0.001秒及自动显示explain语句 蓝色:记录了最终花费的时间
  16. 黄色:执行总条数 红色:URL紫色:explain输出 记录了执行总行数,URL,以及按SQL划分的,每条不同的SQL执行的次数及花费时间
  17. 实际的处理是:先编译成.py文件,use, link都将转为对应的函数,然后进行模板的渲染,在最后和动态插入到&lt;/head&gt;之前。因此use, link可以在渲染前来保证调用的顺序。
  18. find template会按照查找的顺序来显示。这里是有重名的模板,会使用最前一个。
  19. tree可以查看include, extend的结构,箭头所指是当前模板的位置