第十三章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.图书馆“智慧”到什么程度了来源:《中国文化报》(数字报)走进图书馆,首先迎接读者的是机器人管家,语音咨询、图书检索都可在智慧平台上快速完成,人脸识别就能借还图书,智能书柜让书籍“走”出来、再精准“收”回去……这些不是关于图书馆的未来畅想,而是现代图书馆的智慧化服务实景。 在近日举行的2024年中国图书馆年会上,众多图书馆界代表和专家学者认为,我国公共图书馆智慧化https://www.clcn.net.cn/news/default/detail?id=3466
2.福州自助图书馆再上新功能轻点指尖借阅图书记者10日从市图书馆了解到,福州市的24小时自助图书馆再次上线新功能。轻点指尖,即可了解五城区内82台24小时自助图书馆的具体情况,助力全民化阅读风尚的形成。 在“福州市图书馆”微信公众号的“微服务大厅”,进入“24小时自助图书馆”页面,绑定读者证号后,就能够即时查询各处24小时自助图书馆的在架图书,还可根据设http://m.fztvapp.zohi.tv/p/289782.html
3.24小时自助图书馆常见问题解答一、自助图书馆提供哪些服务?自助图书馆为昆山市图书馆的持证读者提供24小时图书阅览、图书自助借还服务、电子报纸阅览、办证、图书检索等功能。 二、怎么进入自助图书馆?把读者证或市民卡(已开通借阅功能)放在门口的感应区,拉门即可进入。 三、没有读者证或市民卡没开通借阅功能怎么办?有市民卡的市民可至自助办证http://www.51ks.com/index/app/detail/cate_id/1/id/15826.html
4.24小时自助图书馆苏州图书馆共有2个24小时自助图书馆,分别位于人民路石家湾46号、苏州图书馆北馆一楼。 主要功能有: 1、图书借阅功能: 读者把想借的图书放到自助借还书机的图书放置区中,点击借书,同时把读者证放到刷卡区读取数据,所借的图书的名字就显示在屏幕上,也就完成了借书的手续。 http://www.szlib.com/fwpp.html?id=2
5.宁波图书馆宁波少年儿童图书馆的空间设计与服务布局充分体现了“儿童友好”和“分级阅读”的理念。馆舍的一至二层主要为借阅空间,设有幼儿、儿童和青少年借阅区、益智玩具馆、国际童书馆、无障碍阅览室、自助图书馆、艺术空间、多功能厅等。 第三层为智慧互动空间,设有传统文化、智慧创意、艺术鉴赏三大空间,凸显宁波特色、科技https://www.nblib.cn/information/12023
6.图书馆关于开通自助催还图书功能的通知图书馆秉承“读者第一、服务至上”的理念,为了让读者知悉自己的图书借阅情况,避免图书逾期,特开通自助催还服务(即在图书到期之前或超期后发送邮件提醒),现需要读者自主完善“我的图书馆”个人电子邮箱信息,用于接收自助催还等提示信息,以便图书馆能够为你提供更加周到的服务。 http://lib.hnmu.com.cn/info/1045/2458.htm
7.智慧图书馆里面有哪些设备,有什么作用?图书馆条码读者馆藏采用了三维感应技术,能在感应内三维空间上任意方向检测电子标签,对图书管理系统进行安全控制,安全门通过对馆藏文献借阅状态做出判断,确认报警提示信息是否鸣响,以达到监控和防盗目的。 打开网易新闻 查看精彩图片 2、自助借还书机 自助借还书机可实现读者自助借书、还书、续借、查询等功能,简化读者借还书方式,提高工作https://m.163.com/dy/article/HVV56DIT05538X2R.html
8.河南省少年儿童图书馆5、 多功能区(六层) 主要功能是提供组织举办文化活动和读者交流场所,设有童梦剧场、视听室、读者沙龙和小报告厅。 6、自助借阅区(配楼) 主要功能是提供读者24小时便捷自助借阅服务,设有24小时自助图书馆和户外休闲阅读区。 7、24小时自助多媒体图书馆 https://hct.henan.gov.cn/2014/08-15/747321.html
9.通州区图书馆官网通州区图书馆开放时间→MAIGOO百科3、查阅电子资源:浏览电子报刊;访问并借阅电子图书和本馆数据库,获取电子资源;享受网上参考咨询服务。 4、通借通还:持具有外借服务功能的读者证可在任意通借通还图书馆借阅。 读者证密码: 为维护您的借阅权益,请牢记您的读者证密码。 办证时间与地点: 1、图书馆一层总服务台、自助办证机 2、自助图书馆 读者https://www.maigoo.com/citiao/171518.html
10.自助服务读者服务关于我们本着“读者至上、精心服务”的原则,福田区图书馆全体同仁团结进取、群策群力、务实创新,大力开展“书香福田”建设,努力打造“图书馆阅读功能区”,为市民读者提供高效便捷、普遍均等的高品质文化服务,为福田中心区的经济文化建设和社会发展做出贡献。https://www.szftlib.org.cn/page/self-service.html
11.智能图书馆自助设备管理系统零代码企业数字化知识站为了成功实施智能图书馆自助设备管理系统,图书馆需要制定详细的实施策略和计划。首先,需要进行需求分析,明确自助设备的功能需求和布局规划;其次,需要选择可靠的供应商,确保设备的质量和售后服务;最后,需要进行员工培训和读者教育,使所有用户能够熟练使用设备。 https://www.jiandaoyun.com/blog/article/699933/
12.图书自助借还系统的设计与实现随着科技的进步和数字化时代的来临,传统图书馆已经逐步向数字化、自动化和智能化的方向发展。其中,图书自助借还系统作为一种新型的服务模式,已经在许多图书馆中得到了广泛的应用。本文旨在探讨图书自助借还系统的设计与实现,包括系统架构、功能模块、技术实现等方面。 https://blog.csdn.net/qq_58404700/article/details/136162464
13.常见问题1.图书馆借书功能合并于学校一卡通内。学校一卡通是师生食堂用餐、超 市消费、宿舍门禁、宿舍水电费、上课打卡、图书馆门禁、图书馆借书 等功能的集合。 2.一卡通必须激活。卡内需包含读者的各项基本信息。 3.办卡与激活卡地点:行政B楼一层,一卡通服务中心。 https://www.fzfu.com/lib/info/1016/1112.htm