热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Odoo安装教程14创建新的插件模块之网页和控制器

网页和控制器Odoo还提供了一个web开发框架,可用于开发与后台应用深度集成的功能。第一步我们来创建一个显示有效图书列表的简单网页。在请求http:librarybooks页面时会

网页和控制器

Odoo 还提供了一个 web 开发框架,可用于开发与后台应用深度集成的功能。第一步我们来创建一个显示有效图书列表的简单网页。在请求 http:///library/books 页面时会进行响应,所以/library/books 是用于实施的 URL。这里我们简短地了解下 Odoo 网页开发,这一话题在第十三章创建网站前端功能中会深入探讨。
Web 控制器是负责渲染网页的组件。控制器是 http.Controller 中定义的方法,与 URL 链接(endpoint)绑定。 访问 URL 时执行控制器代码,生成向用户展示的 HTML。我们使用 QWeb模板引擎方便 HTML 的渲染。
按惯例控制器代码放在/controllers 子目录中,首先编辑 library_app/__init__.py 导入控制器模块目录:
from . import models
from . import controllers
然后添加 library_app/controllers/__init__.py 文件来让目录可被 Python 导入,并在该文件中添加:
from . import main
接下来就要创建真实的控制器文件 library_app/controllers/main.py,并添加如下代码:
from odoo import http
class Books(http.Controller):
@http.route('/library/books', auth='user')
def list(self, **kwargs):
Book = http.request.env['library.book']
books = Book.search([])
return http.request.render(
'library_app.book_list_template', {'books':books})
这里导入的 odoo.http 模块,是提供网页相关功能的核心组件。 http.Controller 是需要继承的类控制器,这里在主控制器类中使用。我们选择的类名和方法并不关联, @http.route 装饰器才是重要的部分,它声明了与类方法关联的 URL 地址,此处为/books。默认访问 URL 地址要求客户登录,推荐明确指出访问的授权模式,所以这里添加了 auth=’ user’参数。要允许公开访问,可为@http.route 添加 auth=’ public’ 参数。
“ 小贴士: 如果使用 auth=’ public’, 控制器代码中在进行图书搜索前应使用 sudo() 进行提权。这部分在第十三章创建网站前端功能会进一步讨论。 ”
在这个控制器方法中,我们使用 http.request.env 获取环境,使用它可从目录中获取有效图书记录集。最后一步是使用 http.request.render() 来处理 library_app.index_template Qweb 模板并生成输出 HTML。可通过字典向模板传值,这里传递了图书记录集。
这时如果重启 Odoo 服务来重载 Python 代码,并访问/library/books 会得到一个错误日志:ValueError: External ID not found in the system: library_app.book_list_template。这是因为我们还没有定义模板。下面就一起来定义模板。
QWeb 模板是一个视图类型,应放在/views 子目录下,我们来创建views/book_list_template.xml 文件:

xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="book_list_template" name="Book List">
<div id="wrap" class="container">
<h1>Booksh1>
<t t-foreach="books" t-as="book">
<div class="row">
<span t-field="book.name" />,
<span t-field="book.date_published" />,
<span t-field="book.publisher_id" />
div>
t>
div>
template>
odoo>

>

元素用于声明 QWeb 模板,它事实上是一个存储模块的 base 模型 – ir.ui.view
记录的快捷方式。模板中包含要使用的 HTML,并使用 Qweb 的特定属性: t-foreach 用于遍历变量 books 的每一项,通过控制器的 http.request.render()调用来获取; t-field 用于渲染记录字段的内容。这里仅简单地使用 QWeb,更多详情见第十三章创建网站前端功能。
在模块的 manifest 中需要声明该 XML 文件来供加载和使用。进行模块升级即可通过http://:8069/library/books 来访问有效图书的简单列表。

总结

本文中我们从 0 开始创建了一个新模块,了解了模块中常用的元素:模型、三个基础视图类型(表单视图、列表视图和搜索视图)、模型方法中的业务逻辑和访问权限。我们还学习了访问权限控制,包括记录规则以及如何使用网页控制器和 Qweb 模板来创建网页。
在学习过程中,我们熟悉了模块开发过程,包含模块升级和应用服务重启来使得修改在 Odoo中生效。不要忘记在添加模块字段时需要进行更新操作。修改含声明在内的 Python 文件需要重启服务。修改 XML 或 CSV 文件需进行更新,一旦不确定,同时进行重启服务和升级模块操作。
我们已经学习创建 Odoo 应用的基本元素和步骤,但大多数情况下,我们的模块都是对已有应用添加功能来进行扩展,我们将在下一章中一起学习

更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/


推荐阅读
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 脑机接口(BCI)技术正逐步将科幻变为现实,从帮助听障人士恢复听力到使瘫痪者重新站立,甚至可能将多年的学习过程压缩至瞬间。本文探讨了这一前沿技术的现状、挑战及其未来前景。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 解决C++编译错误C3867的方法
    本文详细介绍了在不同版本的Visual Studio中,如何正确处理成员函数指针以避免编译错误C3867。同时,提供了一个具体的代码示例及其优化方案。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 不确定性|放入_华为机试题 HJ9提取不重复的整数
    不确定性|放入_华为机试题 HJ9提取不重复的整数 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 在进行Revit插件开发时,经常会遇到窗口被其他应用程序遮挡的问题。本文将介绍如何通过简单的代码调整,确保插件窗口始终保持在Revit主界面的最前端,提升用户体验。 ... [详细]
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • Python 异步编程:ASGI 服务器与框架详解
    自 Python 3.5 引入 async/await 语法以来,异步编程迅速崛起,吸引了大量开发者的关注。本文将深入探讨 ASGI(异步服务器网关接口)及其在现代 Python Web 开发中的应用,介绍主流的 ASGI 服务器和框架。 ... [详细]
  • 嵌入式系统开发:外部中断详解
    本文深入探讨了外部中断的原理和应用,详细介绍了如何配置和使用外部中断,包括硬件设计、编程实现及调试技巧。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
author-avatar
手机用户2702932962_848
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有