第十三章Odoo12开发之创建网站前端功能I我的博客I

Odoo起初是一个后台系统,但很快就有了前端界面的需求。早期基于后台界面的门户界面不够灵活并且对移动端不友好。为解决这一问题,Odoo引入了新的网站功能,为系统添加了CMS(ContentManagementSystem)内容管理系统。这使得我们无需集成第三方CMS便可创建美观又高效的前端。本文中我们将学习如何利用Odoo自带的网站功能开发面向前端的插件模块。

本文主要内容有:

1、添加library_website/models/library_member.py文件

2、添加library_website/models/__init__.py文件:

3、添加library_website/__init__.py文件:

4、添加library_website/views/library_member.xml文件:

访问这些网页的都是门户用户,无需访问后台菜单。我们需要为这个用户组设置安全访问权限,否则会在使用图书网站功能时报权限错误。

5、添加library_website/security/ir.model.access.csv文件,添加对图书模型的读权限:

6、在library_website/security/library_security.xml文件中添加记录规则来限制门户用户所能访问的记录:

base.group_portal是门户用户组的标识符。在创建门户用户时,应设置他们的用户类型为Portal,而不是InternalUser。这会让他们属于门户用户组并继承我们上面定义的访问权限:

小贴士:在模型中使用ACL和记录规则来实现安全权限比使用控制器的逻辑要更为安全。这是因为攻击者有可能跳过网页控制器直接使用RPC来访问模型API。

了解了这些,我们就可以开始实现图书网站的功能了。但首先我们来使用简单的HelloWorld网页简短地介绍下基本网站概念。

要开始了解Odoo网页开发的基础,我们将先实现一个HelloWorld网页来展示基本概念和技术。很有想象空间,是不是?

要创建第一个网页,我们需要一个控制器对象。首先来添加controllers/hello.py文件:

1、在library_website/__init__.py文件中添加如下行:

2、在library_website/controllers/__init__.py文件中添加如下行:

3、添加实际的控制器文件library_website/controllers/hello.py,代码如下:

本例中方法执行的处理非常简单,它返回一个带有HTML标记的文本字符串,HelloWorld。

使用Python字符串来创建HTML很快就会觉得乏味。QWeb可用来增添色彩,下面就使用模板来写一个改进版的HelloWorld网页。QWeb模板通过XML数据文件添加,技术层面上它是与表单、列表视图类似的一种视图类型。它们甚至存储在同一个技术模型ir.ui.view中。

然后添加实际的数据文件views/helloworld_template.xml,内容如下:

模板的渲染是通过render()函数的request对象来实现的。

小贴士:注意我们添加了**kwargs方法参数。使用该参数,HTTP请求中的任意附加参数,如GET或POST请求参数,可通过kwargs字典捕获。这会让我们的方法更加健壮,因为即便添加了未预期的参数也不会产生错误。

下面我们来增加点趣味性,创建我们自己的简单CMS。为此我们可以通过URL在路由中使用模板名(一个页面),然后对其进行渲染。然后就可以动态创建网页,通过我们的CMS来提供服务。实现方法很简单:

在werkzeug的行话中,endpoint是路由的别名,由其静态部分(不含占位符)来表示。比如,CMS示例中的endpoint为/hellocms。

大多数情况下,我们要将页面集成到Odoo网站中,因此接下来的示例将使用website插件模块。

前面的示例并未集成到Odoo网站中,并有页面footer和网站菜单。Odoo的website插件模板为方便大家提供这些功能。

要使用网站功能,我们需要在工作实例中安装website插件模块。应当在library_website插件模块中添加这一依赖,修改__manifest__.py的depends内容如下:

要使用网站功能,我们需要对控制器和QWeb模板进行一些修改。控制器中可在路由上添加一个额外的website=True参数:

集成website模块并非严格要求website=True参数,不添加它也可以在模板视图中添加网站布局。但是通过添加可以让我们在网页控制器中使用一些功能:

如果在网页控制器中无需使用上述功能,则可省略website=True参数。但大多数网站QWeb模板需要使用website=True开启一些数据,比如底部公司信息,所以最好还是添加上。

传入QWeb运行上下文语言的网站数据由website/model/ir_ui_view.py文件中的_prepare_qcontext方法设定。

要在模板中添加网站的基本布局,应为QWeb/HTML包裹一个t-call=”website.layout”指令,如下所示:

t-call运行QWeb模板website.layout并向其传递XML内的tcall节点。website.layout设计用于渲染带有菜单、头部和底部的完整网页,交将传入的内容放在对应的主区域内。这样,我们的HelloWorld!示例内容就会显示在Odoo网站页面中了。

我们的网站页面可能需要一些其它的CSS或JavaScript资源。这方面的网页由website管理,因此需要一个方式来告诉它使用这些文件。我们将使用CSS来添加一个简单的删除线效果,创建library_website/static/src/css/library.css文件并添加如下内容:

很快我们就会使用text-strikeout这个新的样式类。当然,可以使用相似的方法来添加JavaScript资源。

既然我们已经过了一遍基础知识,就来一起实现借阅列表吧。我们需要使用/checkoutURL来显示借阅列表的网页。为此我们需要一个控制器方法来准备要展示的数据,以及一个QWeb模板来向用户进行展示。

在模块中添加library_website/controllers/main.py文件,代码如下:

回到我们的代码,它以request.render()方法收尾。和之前一样,我们传入了QWeb模板渲染的标识符,和模板运行用到的上下文字典。本例中我们向模板传入docs变量,该变量包含要渲染借阅记录的记录集。

QWeb模板使用数据文件来添加,我们可以使用library_website/views/checkout_template.xml文件并添加如下代码:

以上代码使用t-foreach指令来迭代docs记录集。我们使用了复选框input并在借阅完成时保持为已选状态。在HTML中,复选框是否被勾选取决于是否有checked属性。为此我们使用了t-att-NAME指定来根据表达式动态渲染checked属性。当表达式运行结果为None(或任意其它false值)时,QWeb会忽略该属性,本例用它就非常方便了。

在渲染任务名时,t-attf指令用于动态创建打开每个指定任务的明细表单的URL。我们使用一个特殊函数slug()来为每条记录生成易于阅读的URL。该链接目前尚无法使用,因为我们还没有创建对应的控制器。

在每条借阅记录上,我们还使用了t-att指令来在借阅为最终状态时应用text-strikeout样式。

借阅列表中的每一项都有一个相应明细页面的链接。我们就为这些链接实现一个控制器,以及实现一个QWeb模板来用于展示。说到这里应该已经很明朗了。

在library_website/controllers/main.py文件中添加如下方法:

注意这里路由使用了带有model(“library.checkout”)转换器的占位符,会映射到方法的doc变量中。它从URL中捕获借阅标识符,可以是简单的ID数值或链接别名,然后转换成相应的浏览记录对象。

对于QWeb模板,应在library_website/views/checkout_template.xml数据文件中添加如下代码:

这里值得一提的是使用了元素。和在后台中一样,它处理字段值的相应展示。比如,它正确地展示日期值和many-to-one值。

补充:controllers/__init__.py和__mainfest__.py中请自行添加控制器文件和数据文件的引用

读者现在应该对网站功能的基础有了不错的掌握。我们学习了如何使用网页控制器和QWeb模板来动态渲染网页。然后学习了如何使用website插件并使用它来创建我们自己页面。最后,我们介绍了网站表单插件来帮助我们来创建网页表单。这些都是创建网站功能的核心能技巧。

我们已经学习了Odoo主要构件的开发,是时候学习如何将Odoo服务部署到生产环境了。

THE END
1.文献AI服务平台文献AI服务平台(Literature AI Service Platform)是首个面向图书馆界的文献AI服务体系。通过AI深度解析赋能馆藏文献资源。平台融合了5大主流AI模型技术与新华网权威内容资源,围绕“找文献、读文献、用文献”的核心场景,提供智能搜索推荐、深度解读问答、前沿追踪、引文分析等99 +专业服务功能。有效支持了图书馆文献资源从https://tsg.bzu.edu.cn/2024/1209/c20692a275619/page.htm
2.如何制作图书馆网站,文化艺术中心网站搭建全攻略教程读者藏书在信息爆炸的时代,图书馆与文化艺术中心不仅是知识的殿堂,更是连接文化与人心的桥梁。而一个优秀的网站,就是它们在网络世界中的璀璨明灯。你是否渴望为心爱的图书馆或文化艺术中心打造一个专业、富有吸引力的线上平台?本攻略将为你揭示网站搭建的奥秘,从规划布局到功能实现,从视觉设计到用户互动,每一步都为你精心https://www.163.com/dy/article/J5SMEVCP0553SRT0.html
3.图书馆的功能政策法规图书馆的功能 图书馆的职能 一、保存人类文化遗产 二、开发信息资源 三、参与社会教育的职能 1.思想教育的职能 2.两个文明建设的教育职能 3.文化素质的教育职能 4.丰富群众文化生活教育的职能http://www.nanao.gov.cn/stsnaxwhgdlytyjgkml/stsnaxwhgdlytyjgkml/zwgk/whjgxxgk/tsgwzgwgk/zcfg/content/post_843039.html
4.中新友好图书馆“门户网站”华丽上线!功能多的数不完……中新友好图书馆门户网站华丽上线 真正集“美貌”与“才华”于一身 就是这么强大 赶紧了解一下 01.图书检索、预约 我馆现有馆藏图书45万册 通过“图书检索”功能 即可查看具体馆藏信息 若检索图书显示“借出状态” 登录读者账号后 点击“预约该书”功能 http://www.tecla.cn/childtzgg/2880.jhtml
5.图书馆网站建设提供信息服务内容分析图书馆网站建设提供信息服务内容分析。现代图书馆在网站建设工作中要高度重视馆藏信息服务功能的创新完善工作,确保能够根据不同层次读者用户的需求,合理设计出不同的信息服务功能,最大程度满足读者用户的各项体验服务需求。图书馆网站建设需要为市场读者用户提供的信息服务内容主要包括了以下几点。 https://www.hy755.cn/article/23980.html
6.加强图书馆网站建设提高资源利用效率文章摘要:为提高图书馆网站服务质量和资源利用效率,对咸宁职业技术学院教师利用图书馆网站资源进行了调查,分析了存在的问题,提出争取院领导支持,科学购置数字资源;加大数字资源的宣传力度,提高用户信息素养能力;增强校园网外访问功能和网站维护,保证网站良好运行;与用户沟通,变被动服务为主动服务,及时反馈用户信息;科学设置https://www.wm114.cn/wen/138/274405.html
7.大兴区图书馆开通图书续借功能!大兴区图书馆开通图书续借功能! 图书外借42天不够? 为了响应读者延长文献借阅周期的诉求,即日起读者可通过自助借还机、大兴区图书馆微信小程序“悦读大兴”(1月1日正式上线)、首都图书馆网站等多途径进行图书续借。 读者可在图书外借满28天后(未超期状态)续借1次,续期28天。https://m.sohu.com/a/748088929_121123844
8.海南省图书馆地点:海南省图书馆一楼美书馆(公共数字阅读室对面) 活动简介: 数字资源 更多 电子图书 报刊 数据库 音视频 少儿 馆内访问 试用数据库 远程使用指南 “易阅通”电子书畅想之星新语数字图书馆书香海南(中文在线)中华再造善本数据库超星汇雅电子图书维库民国电子图书馆藏配套电子图书(只限馆内访问) https://www.hilib.com/
9.长春市图书馆数字图书馆 馆藏目录 站内搜索 热词: 中国 设计 管理 英语 搜索 我的图书馆 数字资源 馆外访问 喜阅邮书 U书到家 通知公告 长春市图书馆流动图书车服务暂停通知 2024年国庆节期间开馆时间 2024年中秋节期间开馆时间 新闻资讯 党务天地 读者活动 | “城市热读·关东文化讲坛”系列讲座:百草有约——吉林人参文化https://www.ccelib.cn/
10.四川师范大学图书馆新版门户网站问卷调查*2. 您访问图书馆网站的频率是: 每天多次 几乎每天都访问 每周数次 每月数次 几乎不访问 *3. 请问您通常使用什么网络访问图书馆网站? 教育网 中国电信 中国联通 中国移动 其它 *4. 您觉得图书馆网站访问速度如何? 很快 比较快 一般 很慢 *5. 您使用过网站以下哪些功能? 【多选题】 查看图书https://www.wjx.cn/jq/7018707.aspx
11.东莞图书馆www.dglib.cn网站链接:进入网站 服务器IP:121.12.150.155 相关信息:东莞图书馆新馆位于新城市中心广场内,是东莞文化标志性建筑设施之一。总建筑面积为44654平方米,投资1.73亿元,是一个集文献借阅、信息咨询、培训教育、学术研究于一体的大型综合性现代化图书馆。东莞图书馆新馆共6层,地上5层,地下1层,分为图书馆功能区和购书中心https://top.080210.com/siteinfo/30303.html