Odoo | Module | 统计系统周期使用人数/当前在线人数

文内材料

GITHUB地址

前言介绍

Odoo作为开源ERP系统No.01,近年愈发的得到国内很多公司的关注。

虽然它的定位是中小型企业的ERP管理系统,但是在几年的Odoo开发实施过程中,有不足50人的小型企业,也有上万人的中大型企业。功能快速落地高度个性化扩展是它的核心特性,使用其他框架开发一个完整的页面可能需要1-2天,但在Odoo可能远超你的预期,在同等页面且不做翻译的前提下,成熟的Odoo开发工程师只需要 <0.5天的时间即可完成界面的主体开发(不包含各类赋值、处理逻辑)。

所以如果有ERP需求但是不想花费太多License费用的用户或者组织可以了解了解:Odoo

需求描述

返回正题,我们经常看见政府门户类网站或者一些访问量很大的公共网站,都会有一个当前在线人数的功能。
回到Odoo,原生并没有提供这样的数据统计方式或者功能,但是不要担心,毕竟Odoo是一个扩展十分方便的框架,我们可以通过现有的一些功能进行集成。

对于Odoo来说,有三种情况:

  1. 初次登录
  2. Session未过期,通过历史URL进入系统(无需登录)
  3. 网页打开但长时间未处理

源码阅读

  • 初次登录、Session未过期访问
    对于登录和已登录状态访问来说,如果验证成功会重定向回/web的route进行处理,并且最终会进入try内容,如果不发生错误,那么应该返回的是正常的网页内容+返回状态码200

    @http.route('/web', type='http', auth="none")
    def web_client(self, s_action=None, **kw):ensure_db()if not request.session.uid:return werkzeug.utils.redirect('/web/login', 303)if kw.get('redirect'):return werkzeug.utils.redirect(kw.get('redirect'), 303)request.uid = request.session.uidtry:context = request.env['ir.http'].webclient_rendering_context()response = request.render('web.webclient_bootstrap', qcontext=context)response.headers['X-Frame-Options'] = 'DENY'return responseexcept AccessError:return werkzeug.utils.redirect('/web/login?error=access')
    
  • 网页打开但长时间未处理
    初次登录、已登录访问可以通过web_client的扩展进行用户信息记录,但是如何检测用户还在使用网页,而不是使用完就关闭页面,也就是如何检测用户的在线情况:Longpolling
    我们可以通过新创建一个Module继承mail模块,以激活longpolling的定时轮询功能,轮询功能将定期的与服务器进行信息交互(交互方法如下),我们后续可以对其进行扩展:

    @route('/longpolling/poll', type="json", auth="public")
    def poll(self, channels, last, options=None):if options is None:options = {}if not dispatch:raise Exception("bus.Bus unavailable")if [c for c in channels if not isinstance(c, pycompat.string_types)]:raise Exception("bus.Bus only string channels are allowed.")if request.registry.in_test_mode():raise exceptions.UserError(_("bus.Bus not available in test mode"))return self._poll(request.db, channels, last, options)
    

    在这里插入图片描述

集成操作

  • 操作内容
    1. 创建新模块,模块继承mail
    2. 集成登录controller、poll
    3. 提供用户访问信息记录表,必要时提供界面显示
  1. 创建新模块,继承mail
    在这里插入图片描述

  2. 集成登录controller、poll

    # -*- coding: utf-8 -*-import odoo
    from odoo import http
    from odoo.http import request
    from odoo import exceptions, _
    from odoo.http import content_disposition, dispatch_rpc, request, \serialize_exception as _serialize_exception, route, Response
    from odoo.addons.bus.controllers.main import BusController
    from odoo.addons.web.controllers.main import Homeclass BusControllerInherit(BusController):# 存活检测 longpolling@route()def poll(self, channels, last, options=None):self.collection_current_users()res = super(BusControllerInherit, self).poll(channels, last, options)return res@staticmethoddef collection_current_users():request_ip = request.httprequest.remote_addrrequest_db = request.httprequest.session.dbrequest_user = request.httprequest.session.uidrequest_login = request.httprequest.session.logintry:conn = odoo.sql_db.db_connect(request_db)with conn.cursor() as cr:sql = """insert into collection_user_info(request_ip, request_db, request_user, request_login, fast_login_time, latest_login_time)values (%s, %s, %s, %s, now(), now())on conflict (request_ip, request_db, request_user, request_login) do update set latest_login_time = now();"""cr.execute(sql, (request_ip, request_db, request_user, request_login))except Exception as e:raise eclass HomeInherit(Home):# 记录登录或者session存在时自动登录的情况@http.route()def web_client(self, s_action=None, **kw):res = super(HomeInherit, self).web_client(s_action, **kw)if isinstance(res, Response) and res.status_code == 200:BusControllerInherit.collection_current_users()return res
    
  3. 提供用户访问信息记录表,必要时提供界面显示
    具体代码不展示了,直接放图吧,因为局域网的关系,访问数据不是很多,大家可以自行下载模块安装测试 GITHUB工程地址
    在这里插入图片描述
    在这里插入图片描述





🎉如果对你有所帮助,可以点赞、关注、收藏起来,不然下次就找不到了🎉


【点赞】⭐️⭐️⭐️⭐️⭐️
【关注】⭐️⭐️⭐️⭐️⭐️
【收藏】⭐️⭐️⭐️⭐️⭐️

Thanks for watching.
Kenny

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipyvizzu:一款可以绘制超级惊艳的可视化动图的 Python 工具包

今天我给大家介绍一款可视化模块,使用它可以绘制出十分惊艳的动图效果,那么当然第一步我们首先是要安装一下该模块,通过pip命令行来安装 pip install ipyvizzu牛刀小试 我们首先来简单地使用该模块来绘制一张动图,用Pandas导入数…

2024年阿里云服务器优惠活动大全,实时更新

阿里云服务器优惠活动大全包括:云服务器新人特惠、云小站、阿里云免费中心、学生主机优惠、云服务器精选特惠、阿里云领券中心等,活动上阿里云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、轻量应用服务器2核2G3M带宽轻量服务器一年61元,…

【大数据进阶第三阶段之Hive学习笔记】Hive安装

目录 1、环境准备 2、下载安装 3、配置环境变量 4、配置文件 4.1、配置hive-env.sh ​编辑4.2、配置hive-site.xml 5、上传配置jar 6、启动 1、环境准备 安装hadoop 以及 zookeeper、mysql 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建-CSDN博客 《z…

二刷Laravel 教程(用户模型)总结Ⅲ

一、数据库迁移 当我们运行迁移时,up 方法会被调用;(创建表) 当我们回滚迁移时,down 方法会被调用。(删除表) public function up() { //create 方法会接收两个参数:一个是数据…

C++string类的介绍及常用函数用法总结

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生🐻‍❄个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE🐼本文由GOTXX原创,首发CSDN&a…

更改ERPNEXT源

更改ERPNEXT源 一, 更改源 针对已经安装了erpnext的,需要更改源的情况: 1, 更改为官方默认源, 进入frapp-bench的目录, 然后执行: bench remote-reset-url frappe //重设frappe的源为官方github地址。 bench remote-reset-url…

如何配置 VS Code 实现 git 密码免输入

目录 问题描述尝试过的失败方法问题分析最终采用的解决方案:利用 ssh key 提供密码免输入功能安装 git windows 命令工具在windows本地生成 ssh key将公钥安装到 git 服务器第一种方法第二种方法调试方法 参考资料: 问题描述 在 Windows 上,使用 Visual…

AI股票崩盘预测模型(企业建模_论文科研)ML model for stock crash prediction

对齐颗粒度,打通股票崩盘底层逻辑,形成一套组合拳,形成信用评级机制良性生态圈,重振股市信心!--中国股市新展望!By Toby!2024.1.3 综合介绍 股票崩盘,是指证券市场上由于某种原因&a…

玩机技巧|拿到新电脑or电脑重装系统后该如何设置

1、关闭权限申请 你是否碰到过,在打开一个应用时,电脑总会询问”你要允许此应用对你的设备进行更改吗?",这个或许很烦,下面我们就讲这个关闭,告别不断地请求。(此处你点击是,便…

ssm基于JSP的明水县苹果网吧计费管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本明水县苹果网吧计费管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大…

包含所有字符的最短字符串

由题还是很容易想到可以用一个哈希表来统计字符串中每个字符出现的次数。首先扫描字符串t,每扫到一个,哈希表中对应值加1。然后扫描字符串s,每扫描一个就检查哈希表中是否包含该字符,没有则忽略不计。如果存在,对应的值…

【数据结构】八大排序之快速排序算法

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.快速排序简介及思路 二.快速排序代码实现的三种方式 📌左右交换法 📌挖坑填坑法 📌前后指针法 三.快速排序的时间复杂度分析…

ssm基于HTML5的交流论坛的设计与实现+vue论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

【Java EE初阶九】多线程进阶一(锁策略)

前言 锁的策略:加锁过程中,即处理冲突的过程中,需要涉及到的一些不同的处理方式(此处锁策略并不是java独有的),本篇内容主要是讲解一下关于锁的相关知识点; 1. 关于锁的分组 1.1 第一组&#x…

动态内存管理:malloc free

//——————1.动态内存管理(内存空间) 共四个函数:malloc free calloc realloc 1. 为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节 char arr[10] { 0 };//在栈空间上开…

一、Qt介绍

一、Qt介绍 1、介绍 Qt是一套程序开发库,但是与MFC(依赖于Windows API)不同,Qt是跨平台开发库。 Qt获取:[Qt下载地址](https://download.qt.io/archive/qt/)2、Qt安装 QtMinGWSourcesQt ChartsQt Data Visualizatio…

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形) 在Android开发中,使用Glide加载图片时,我们经常需要对图片进行特定的处理,比如裁剪和圆角变换,特别是一些设计稿,…

cpufreq子系统

cpufreq是linux上负责实现动态调频的关键,这篇笔记总结了linux内核cpufreq子系统的关键实现(Linux 3.18.140)。 概述 借用一张网络上的图片来看cpufreq子系统的整体结构: 用户态接口:cpufreq通过sysfs向用户态暴露接…

Java知识点:泛型、类加载器、内部类、可变参数

文章目录 1、this关键字2、泛型2.1 泛型介绍2.2 泛型分类定义2.2.1 泛型类2.2.2 泛型方法2.2.3 泛型接口 2.3 泛型通配符 3、可变参数4、日志4.1 使用步骤4.2 日志级别4.3 配置文件 5、类加载器5.1 类加载器5.2 类加载的完整过程5.2.1 类加载时机5.2.2 类加载过程 5.3 类加载的…

【开源项目】超经典开源项目实景三维数字孪生智慧工厂

数字孪生工厂,以模型驱动的自动化,与数据驱动的人工智能技术紧密融合与协同,实现机器、工件与组件间全面的和点对点的数据通信。飞渡科技基于自研DTS平台,将物联网IOT、人工智能、大数据、云计算等技术应用于工厂,实现…