Pylons 09x 到 Pylons 10 的 Web 应用迁移注意事项Word下载.docx
《Pylons 09x 到 Pylons 10 的 Web 应用迁移注意事项Word下载.docx》由会员分享,可在线阅读,更多相关《Pylons 09x 到 Pylons 10 的 Web 应用迁移注意事项Word下载.docx(5页珍藏版)》请在冰豆网上搜索。
![Pylons 09x 到 Pylons 10 的 Web 应用迁移注意事项Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/31/806b1fe9-19d8-4eae-9102-70607e1609f2/806b1fe9-19d8-4eae-9102-70607e1609f21.gif)
c=>
tmpl_context,g=>
app_globals
Pylons0.9.x中两个最常用的变量分别用一个字母标识。
g代表全局对象,c则代表控制器传递给模板的对象。
在Pylons1.0中,g需要替换做app_globals,c要替换做tmpl_context。
如果觉得c,g用起来更方便,也可以在代码中用如下语句建立别名
frompylonsimportapp_globalsasg
frompylonsimporttmpl_contextasc
但是,这不是万能的,在单元测试框架的代码中,TestResponse对象包含的tmpl_context就不能用c来代替。
因此建议彻底替换代码中的c和g对象名称。
redirect_to=>
redirect
在Pylons0.9.x代码中,网页重定向用的是redirect_to语句。
在Pylons1.0中要用redirect替换,同时注意修改相应的导入语法。
将
frompylons.controllers.utilimportredirect_to
或者
formroutesimportredirect_to
替换为
frompylons.controllers.utilimportredirect
url_for=>
url
构造url地址语法需要由pylons0.9.x的url_for换做url。
并注意对于非命名映射地址,至少需要提供controller和action参数。
pylons0.9.x在模板中的url_for往往可以省略的controller参数,在pylons1.0中不能省略。
例如:
下列0.9.x的调用
returnredirect_to(h.url_for(controller='
security'
action='
failed'
))
redirect_to(h.url_for(controller='
check'
h.url_for(action='
view'
id=logs[i].get('
revision'
'
'
)),...
替换为pylons1.0的调用
returnredirect(url(controller='
redirect(url(controller='
action='
index'
url(controller='
logs'
stylesheet_link_tag=>
stylesheet_link
旧版本WebHelpers的仿照ROR实现的rails类在新的WebHelpers被取消了,包含stylesheet文件的调用需要改写。
原语法
fromwebhelpers.rails.asset_tagimportstylesheet_link_tag
${h.stylesheet_link_tag('
/css/common'
media='
all'
)}
新语法
fromwebhelpers.html.tagsimportstylesheet_link
${h.stylesheet_link(h.url('
/css/common.css'
),media='
javascript_include_tag=>
javascript_link
同样由于WebHelpers.rails的取消,原来一条javascript_include_tag就可以包含所有相关javascript脚本的语句要用多条的javascript_link替代。
fromwebhelpers.rails.asset_tagimportjavascript_include_tag
${h.javascript_include_tag(builtins=True)
fromwebhelpers.html.tagsimportjavascript_link
${h.javascript_link(h.url('
/javascripts/prototype.js'
))}
/javascripts/scriptaculous.js'
/javascripts/unittest.js'
scriptaculous内置支持被取消
WebHelpers旧版本仿照ROR,使用scriptaculous实现页面特效。
但是新版本WebHelpers不再内置Javascript框架和特效支持,而是将选择权交给用户。
由用户决定是使用jQuery,Prototype,jQueryUI,scriptaculous或者ExtJs。
模板中原语法
complete='
hideNoticesPopup();
+h.visual_effect("
Highlight"
"
acl_msg"
duration=1),
直接调用scriptaculousJavaScript函数:
onComplete:
function(request){hideNoticesPopup();
newEffect.Highlight('
acl_msg'
{duration:
1});
},
form_remote_tag被取消
WebHelpers中仿照rails的form_remote_tag也不复存在。
直接写HTML吧,虽然麻烦些
<
%
context.write(
h.form_remote_tag(
html={'
id'
:
main_form'
url=h.url_for(action='
create_submit'
),
update="
message"
method='
post'
before='
showNoticesPopup()'
complete='
switch_message_box();
)
%>
模板中直接写Form元素进行替换:
formaction="
${h.url(controller="
repos"
)}"
id="
main_form"
method="
POST"
onsubmit="
showNoticesPopup();
newAjax.Updater('
message'
'
)}'
{asynchronous:
true,evalScripts:
true,method:
onComplete:
parameters:
Form.serialize(this)});
returnfalse;
"
>
传递给模板的外部变量直接显示要先转码
Pylons旧版本传递给模板的c变量可以包含HTML代码,并可以不经过处理直接显示在模板中:
divid="
logs"
${c.display}
/div>
新版本Pylons会对变量中HTML标签进行转换,要直接显示的写法如下
context.write(tmpl_context.display);
WebTest升级导致测试用例失效
测试框架中获取页面的webtest.TestResponse对象数据结构改变
∙status属性值由int改为字符串
∙res=self.app.get(url_for(controller='
authz'
assertres.status==302,res.status
要改为新语法:
res=self.app.get(url(controller='
assertres.status=="
302Found"
res.status
∙header属性改名为headers,header['
location'
]可以直接用location属性
assertres.header('
).endswith('
/login'
),res.header('
)
assertres.location.endswith('
),res.location
∙控制器传参c改名为tmpl_context
∙res=self.app.get(url(controller='
assertres.c.reposlist==[u'
/'
u'
document'
project1'
project2'
repos1'
repos2'
repos3'
],res.c.reposlist
assertres.tmpl_context.reposlist==[u'
],res.tmpl_context.reposlist
以上是向Pylons1.0迁移的主要注意事项。
既然Pylons已经升级为1.0版本,相信框架的稳定性将会得到改善。
梦醒了。
Pylons,
Python
分享文章
这篇文章由
蒋鑫
于2010年6月1日-22:
28发表于北京群英汇信息技术有限公司,分类于
Python。