首页 > 其他分享 >odoo面试问题总结

odoo面试问题总结

时间:2023-04-05 11:12:05浏览次数:40  
标签:总结 存储 odoo 系统 模式 面试 Session 模块 Odoo

基础问题:

  1. Model和TransientModel区别是什么?什么场景下应该使用TransientModel?
  2. 字段的compute属性是用来做什么的?如何将包含compute属性的字段的值存储到数据库中?
  3. 如何创建一个索引字段?
  4. 如何设置一个字段的默认值?默认值可以是一个函数吗?
  5. 如何给限定某个字段只能由某个让用户组的人访问?
  6. 如何将某个字段设置为提权访问(admin)?
  7. api.model的作用是什么?
  8. 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}

 

 

中级问题:

  1. 什么是开发者模式?开发者模式中的三种模式的区别是什么?
  2. models中inherit和inherits的区别是什么?
  3. Binary字段与附件对象有什么关系?如何更改附件默认存储的位置?
  4. base模块和web模块分别在系统中扮演什么样的角色?
  5. 如何将自定义的widget添加到系统中?
  6. csrf_token是什么?有什么作用?是如何生成的?
  7. 为什么jsonrpc中不用传csrf_token?
  8. Session是如何存储的?odoo是如何判断Session是否有效的?
  9. 配置文件中的limit_memory_soft和limit_memory_hard区别是什么?
  10. 如何更新系统中全部的模块?其原理是怎样的?

回答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()` 方法来加载所有已安装的模块,并检查它们是否需要更新。如果有更新的模块,则会按照一定的顺序执行更新操作,以确保不会出现依赖关系错误或其他异常情况。更新完成后,系统会自动重启以使更改生效。

 

 

高级问题:

  1. Environment对象的作用是什么?
  2. Registry是什么?默认的Registry的LRU大小是多少?
  3. 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,系统,模式,面试,Session,模块,Odoo
From: https://www.cnblogs.com/1314520xh/p/17288973.html

相关文章

  • JavaWeb——Tomcat的基础应用总结,看这一片文章就够了(web服务器软件、启动时黑窗口闪退
    目录1、Web服务器软件概述2、Tomcat基本操作3、Tomcat部署项目4、Tomcat与IDEA集成并创建web项目本文讲解web服务器Tomcat,关于Web的相关概念,可以回顾以前的文章。1、Web服务器软件概述服务器,就是安装了服务器软件的计算机;服务器软件,就是可以接收用户的请求,处理请求,做出响应的软件;We......
  • Vue进阶(四十七):面试必备:2023 Vue经典面试题总结(含答案)
    一、什么是MVVM?MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View代表UI组件,它负责将数据模型转化成UI展现出来,ViewModel是一个同步View和Model的对象。在MVVM架构下,View和Model之间并没......
  • 各类题目解法总结
    各类题目解法总结一、DP性质:最优子结构,可拆解并且子问题最优,父问题最优子问题重复性,一个子问题可能会影响多个不同的下一阶段的原问题(可以从数位DP中清楚地理解)无后效性,即此时的之前状态无法直接影响未来的决策1.1区间DP常见数据范围&解题方法:数据范围类......
  • 今日总结-采用opencv库实现人脸识别
      实现效果如上经过opencv配置与调用opencv训练好的模板最终一晚上多次尝试实现了人脸识别。后续,会继续努力实现人脸对此与人脸关键点检测。#导入cv模块importcv2ascv#检测函数defface_detect_demo():gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)face_detec......
  • 每日总结2023/3.28(pycharm创建pp工程)
            defcalculate_fee(distance_travelled):return10+2*distance_travelledforxin[1.0,3.0,5.0,9.0,10.0,20.0]:print(calculate_fee(x))   ......
  • github使用总结
    一、github和本地git绑定1.1本地安装gitwindows10下gitbash安装教程-w_boy-博客园(cnblogs.com)1.2git生产Key,绑定到github1.2.1)、打开git命令窗口,配置用户名(填自己的姓名)gitconfig--globaluser.name“yinhang”1.2.2)、配置用户邮箱(......
  • 4.3今日总结
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname=&quo......
  • 每日总结 4.4
    今天进行了模拟售卖机的javaweb的简单编写,编写了大概的流程。代码量大概50行。<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="toolse.Tll"%><%@pageimport="java.util.*&......
  • 面试-日记2
    面试-经验2【小米汽车】问题方法思路:滑动窗口法,具体见:C语言中的窗口滑动技术#include<stdio.h>#include<string.h>#include<stdlib.h>intlengthOfLongestSubstring(char*s){ if(s==NULL) return0; intlen=strlen(s); char*tmp=(char*)calloc(le......
  • 4.04每日总结
    以下是SQLSELECT语句使用WHERE子句从数据表中读取数据的通用语法:SELECTfield1,field2,...fieldNFROMtable_name1,table_name2...[WHEREcondition1[AND[OR]]condition2.....查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条......