odoo面试问题总结
基础问题:
- Model和TransientModel区别是什么?什么场景下应该使用TransientModel?
- 字段的compute属性是用来做什么的?如何将包含compute属性的字段的值存储到数据库中?
- 如何创建一个索引字段?
- 如何设置一个字段的默认值?默认值可以是一个函数吗?
- 如何给限定某个字段只能由某个让用户组的人访问?
- 如何将某个字段设置为提权访问(admin)?
- api.model的作用是什么?
- create方法接受的参数是什么类型?
回答1:
1. Model和TransientModel的区别在于,Model是持久化的,可以在数据库中保存数据,而TransientModel不会保存到数据库。应该在需要暂存临时数据的场景下使用TransientModel。
2. 字段的compute属性用于计算字段值,通常通过读取或操作其他字段来计算。这些计算字段的值不会被存储到数据库中,
而是在每次请求时动态生成。如果要将计算字段的值存储到数据库中,应该设置store=True属性。
3. 可以使用@api.depends('field_name')和@api.depends_context('key_name')等装饰器来创建索引字段。具体实现方式取决于Odoo的版本和所选的ORM。
4. 可以使用默认值属性(default)或者计算属性(compute)来设置字段的默认值。默认值可以是函数,但必须返回一个新值而不能修改任何现有对象。
5. 可以使用groups属性限制某个字段只能由某个用户组访问。例如: groups="base.group_user,my_module.my_group"
6. 可以使用access_rights属性将字段设置为提权访问(admin)。例如: access_rights={'write': 'base.group_system'}
7. api.model(也称为模型API)提供ORM语法及相关方法,可用于创建、读取、更新和删除模型的记录,还提供了一些辅助函数。
8. create方法接受一个字典类型的参数,包含待创建记录的字段名和对应的值。例如: {'field_name_1': value_1, 'field_name_2': value_2}
中级问题:
- 什么是开发者模式?开发者模式中的三种模式的区别是什么?
- models中inherit和inherits的区别是什么?
- Binary字段与附件对象有什么关系?如何更改附件默认存储的位置?
- base模块和web模块分别在系统中扮演什么样的角色?
- 如何将自定义的widget添加到系统中?
- csrf_token是什么?有什么作用?是如何生成的?
- 为什么jsonrpc中不用传csrf_token?
- Session是如何存储的?odoo是如何判断Session是否有效的?
- 配置文件中的limit_memory_soft和limit_memory_hard区别是什么?
- 如何更新系统中全部的模块?其原理是怎样的?
回答2:
1. 什么是开发者模式?开发者模式中的三种模式的区别是什么?
开发者模式是一种Odoo应用程序的高级用户界面,它允许开发者和系统管理员以更灵活的方式定制、配置和管理Odoo系统。开发者模式中包含三种模式:
- 普通模式:默认模式,只显示常用的功能和菜单。
- 调试模式:提供了额外的调试选项,如查看日志信息、查看数据库表结构等。
- 工程师模式:最高级别的模式,允许进行系统文件的修改、添加自定义代码等操作。
2. models中inherit和inherits的区别是什么?
`inherit` 和 `inherits` 都是Odoo中用于继承模型的关键词,但它们的作用略有不同:
- `inherit` 用于向一个已存在的模型追加字段,方法和视图等,可以多次使用。
- `inherits` 用于创建一个新的模型,并从指定的父模型中继承所有的字段、方法和视图等。
3. Binary字段与附件对象有什么关系?如何更改附件默认存储的位置?
在Odoo中,Binary字段用于存储二进制数据(例如图片、文档等),而附件对象则用于管理这些二进制数据的存储和访问。每个附件对象都对应一个二进制数据文件,并在数据库中存储一条记录,该记录包含了文件的元数据信息(如文件名、文件类型等)。
要更改附件默认存储的位置,可以设置系统参数 `ir_attachment.location` 的值。默认情况下,此参数为 `file`,表示将附件文件存储在文件系统中。如果要将附件文件存储在Amazon S3或其他云服务商中,请参考Odoo文档中的相关说明进行配置。
4. base模块和web模块分别在系统中扮演什么样的角色?
- `base` 模块是Odoo系统的核心模块之一,提供了许多基础功能,如用户管理、安全认证、多语言支持、邮件发送等。
- `web` 模块是Odoo系统中负责处理Web请求和响应的模块,提供了许多与Web界面相关的功能,如路由、控制器、模板引擎等。
5. 如何将自定义的widget添加到系统中?
要将自定义的widget添加到Odoo系统中,可以按照以下步骤操作:
- 创建一个新的Odoo模块,包含必要的Python代码和XML视图文件。
- 在XML视图文件中使用 `<script>` 标签加载自定义widget所需的JavaScript和CSS文件。
- 在Python代码中继承 `odoo.http.WebController` 类,并使用 `@http.route()` 装饰器将自定义widget的路由注册到系统中。
6. csrf_token是什么?有什么作用?是如何生成的?
`csrf_token` 是一种安全措施,用于保护Web应用程序免受跨站请求伪造(CSRF)攻击。它是一个随机生成的字符串,每次请求时都必须包含在请求的数据中。Odoo系统中的 `csrf_token` 是通过调用 `_compute_session_token()` 方法生成的,该方法使用用户的Session ID、当前时间戳和一些其他参数计算出一个唯一的token值。
7. 为什么jsonrpc中不用传csrf_token?
因为在使用JSON-RPC协议进行通信时,每个请求都会包含一个特殊的 `session_id` 参数,该参数会随着用户的登录而自动获取。Odoo系统会在用户登录时为其分配一个Session ID,并将其记录在服务器端。因此,在使用JSON-RPC进行通信时,系统可以直接根据 `session_id` 来验证用户身份,无需再使用 `csrf_token` 进行验证。
8. Session是如何存储的?odoo是如何判断Session是否有效的?
在Odoo系统中,Session是以Cookie的形式存储在客户端浏览器中的。当用户第一次访问系统时,系统会生成一个唯一的Session ID,并将其存储在Cookie中。之后,每次用户发送请求时,系统都会检查请求中是否包含有效的Session ID,并根据Session ID查找用户在服务器端存储的Session数据。如果Session数据存在且未过期,则可以认为该Session有效。
系统判断Session是否有效的具体逻辑如下:
- 首先,系统会检查请求中是否包含名为 `session_id` 的参数。
- 如果存在 `session_id`,则系统会尝试将其与服务器端存储的Session数据进行匹配。
- 如果匹配成功,则可以认为Session有效;否则,系统会返回一个错误响应,并要求用户重新登录。
9. 配置文件中的limit_memory_soft和limit_memory_hard区别是什么?
`limit_memory_soft` 和 `limit_memory_hard` 是用于限制Odoo进程内存使用的参数,具体区别如下:
- `limit_memory_soft`:表示Odoo进程在消耗了指定量的内存后,应该开始释放一些不必要的资源以减少内存使用。默认值为64MB。
- `limit_memory_hard`:表示Odoo进程在消耗了指定量的内存后,应该立即停止运行以防止内存泄漏。默认值为268435456(即256MB)。
10. 如何更新系统中全部的模块?其原理是怎样的?
要更新Odoo系统中所有已安装的模块,可以按照以下步骤操作:
- 在命令行中进入Odoo系统的根目录,并执行以下命令:`./odoo-bin -d <database_name> -u all`
- 上述命令将首先停止当前正在运行的Odoo服务,然后重新启动服务,并对所有已安装的模块执行升级操作。
这个命令的原理是通过调用Odoo系统核心代码中的 `load()` 方法来加载所有已安装的模块,并检查它们是否需要更新。如果有更新的模块,则会按照一定的顺序执行更新操作,以确保不会出现依赖关系错误或其他异常情况。更新完成后,系统会自动重启以使更改生效。
高级问题:
- Environment对象的作用是什么?
- Registry是什么?默认的Registry的LRU大小是多少?
- odoo的多workder模式如何开启?单worker和多worker的运行机制有什么不同?
回答3
1. 在odoo中,Environment对象是一个重要的工具,它允许Python代码与数据库进行交互。它提供了一种可扩展的方式来管理和更新数据模型、记录和查询数据库。
2. 在odoo框架中,Registry是一个用于注册和查找模型、视图、服务等的简单存储机制。默认情况下,Registry的LRU大小为10000。
3. 要启用odoo的多worker模式,可以在启动命令中使用 `--workers` 参数并设置大于1的值。在单worker模式下,所有请求都由一个进程处理;而在多worker模式下,请求会被多个进程同时处理,从而 提高系统的吞吐量。两种模式的主要区别在于处理客户端请求的方式不同,单worker模式只有一个工作线程,而多worker模式下有多个工作线程。
odoo面试问题总结的更多相关文章
- 42.Odoo产品分析 (四) – 工具板块(10) – 问卷(2)
查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (四) – 工具板块(10) – 问卷(1) 4 页面 即问卷,点开一项查看: 可以看出,网页就是问卷本身的子目录,其中指明了该目录包括哪 ...
- 23.Odoo产品分析 (三) – 人力资源板块(4) – 招聘流程(1)
查看Odoo产品分析系列--目录 安装招聘流程模块: 可以看到我们在前面的章节中设置的"生产经理"岗位,和其他的看板视图一样,每一个岗位板块提供了各种便捷的操作入口和颜色设置. ...
- Odoo HRMS应用简介
Odoo HRMS包含行政管理的大部分功能,包含 部门组织架构 员工清册 岗位规划以及招聘管理 用工合同 考勤管理 休假和加班 费用报销 员工考核 绩效.激励.培训成绩 薪资清册 个角色 角色 ...
- C++常见笔试面试要点以及常见问题
1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...
- [Java面经] 关于面试的二三事.
今天终于闲下来了, 那么也好总结下这几天面试的经历.四天的时间一共面了七家, 有一家是自己推迟了没有去.声明:如若转载请注明出处:http://www.cnblogs.com/wang-meng/p/ ...
- 在面试中忽然发现DateTime的一些...
今天说说我面试中碰到的一个小问题,在我问起DateTime为什么无法赋值NULL值,一般第一反应都认为它是值类型,不是引用类型,但随后我查阅了度娘自我学习到它是结构类型,那么随之而然就无法赋值NULL ...
- 2016年8月ios面试问题总结
1.app分发方式 所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用. a:个人或者公司的开发者账号 可以上传appStore,用户通过appStore下载. b:企业账号:打包分发. ...
- 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮
(出处:http://www.cnblogs.com/linguanh/) 前序: 距离 2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Android面试经验 -- 乐视
此次投的是三年经验的Android开发,最后反而因为自己的失误,没有准备充分而导致结果很悲剧,以此告诫自己千万不能疏忽大意. 面试过程 第一次去大公司面试,心里不是一般的激动和紧张,来到乐视大厦门口, ...
随机推荐
- 他来了,为大模型量身定制的响应式编程范式(1) —— 从接入 DeepSeek 开始吧
哒哒哒,他来了! 今天我们要介绍一种新型的 Java 响应式大模型编程范式 -- FEL.你可能听说过 langchain,那么你暂且可以把 FEL 看作是 Java 版本的 langchain. 话 ...
- php用token做登录认证
https://blog.csdn.net/qq_20869933/article/details/133201967 作用: PHP 使用token验证可有效的防止非法来源数据提交访问,增加数据操作 ...
- docker push image harbor http 镜像
前言 搭建的 harbor 仓库为 http 协议,在本地登录后,推送镜像发生如下报错: docker push 192.168.xx.xx/test/grafana:v10.1.1 The push ...
- kubectl port-forward bind: address already in use unable
前言 本地的 8080 映射到 Pod 的 80,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod kubectl port-forward wp-pod 8080:80 & ...
- python代码格式风格 PEP 8
前言 Python Enhancement Proposal #8叫做PEP 8,它是针对 Python 代码格式而编订的风格指南. 编写 Python 代码时,总是应该遵循 PEP 8 风格指南. ...
- 国内四大骨干网与十大ISP服务商
1.骨干网 几台计算机连接起来,互相可以看到其他人的文件,这叫局域网,整个城市的计算机都连接起来,就是城域网,把城市之间连接起来的网就叫骨干网.这些骨干网是国家批准的可以直接和国外连接的互联网.其他有 ...
- Redis 原理 - String
String 数据结构 首先我来看下, Redis 中 String 的数据结构: 我们称之为 SDS (Simple Dynamic String) 简单动态字符串 struct sdshdr { ...
- MySQL-全句锁、表锁和元数据锁
全局锁 全局锁是锁住整个数据库实例,只能读,任何关于更新操作的语句都会阻塞. 全局锁的适用场景 针对数据库做全库的逻辑备份操作时,需要使用全局锁. 全局锁的影响: 如果在主库上做全局锁操作,业务基本停 ...
- STLINK/JLINK USB识别不稳定问题的解决
第一阶段:自己基于STM32F103C8T6的STLINK,调试一直正常. 第二阶段:发现了硬汉的教程,基于JLINK的RTT viewer 代替串口打印调试信息,所以购买了JLINK,手里的STLI ...
- 请求参数的绑定(获取请求数据)、请求参数是一个POJO
一. @Controller @RequestMapping("/parem") public class ParamController { /** * springmvc接受请 ...