4.odoo入门——培训签到课程项目(二),后端逻辑
来源:互联网 发布:淘宝宜家代购是真的吗 编辑:程序博客网 时间:2024/06/05 20:01
第4天:
遇到的问题:
发现了一个Python获取当前时间和其时区问题:
在odoo中插入数据库的记录中的时间对象都和我们东八区有8个时间的误差,后来才发现,在odoo10/start.py中定义了时间区间是UTC
__import__('os').environ['TZ'] = 'UTC'
那么如何修改成东八区呢?
我以为修改成”Asia/Shanghai”就可以,但是发现数据库记录中仍然是与我的时区相差八个小时,那么肯定还有其他地方是需要更多的修改,参考博客:
http://www.oschina.net/question/5189_3943
在尽量不修改odoo源代码的前提下,我就先不进行修改了,那么就自己手动解决时区问题:
在我们进行时间比较时,手动转化成时间戳模式,再进行比较
那么如果我们要进行提取数据库中的时间项呢,那肯定要进行转换成+8个小时之后的
Python中2个格式化时间的比较
解决方法(时间对象和时间戳的相互转换)参考链接:
http://blog.csdn.net/google19890102/article/details/51355282
实现转换如下: UTC时间对象——>时间戳——> + 8个时间——>转换成时间对象:
#从数据中取出时间对象,转化成时间戳,再加8小时
time_start_val = time.mktime(time.strptime(obj.time_start, "%Y-%m-%d %H:%M:%S")) + 8 * 60 * 60# 将数据库中的时间对象对应的时间戳转换回格式化字符串# 1,首先转换成localtimetime_start_local_val = time.localtime(time_start_val)# 2.#转换成新的时间格式(比如2016-05-05 20:28:54)true_time_start = time.strftime("%Y-%m-%d %H:%M:%S",time_start_local_val)
这样就完成了转化
在odoo平台开发中,我负责的是后端逻辑的编写,但是对写什么,怎么写,毫无头绪——感觉自己什么都不了解啊。后来根据我的了解到就是,一个项目下的其中2歌文件夹,分别是controllers和templates,文件目录如图所示:
当我们打开templates中的页面时,controllers中的main.py会根据你所打开的页面根据路由信息调用对应的函数,返回相应的数据给前端——这是我目前了解到的套路,这可能跟jinja这个模版引擎有关(促使前后端分离),那么这个我们需要进行进一步的深入学习。可以先说说我的一个前端页面代码:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title></head><body><ul> {% for item in data %} <!-- json数组 --> <li>课程名字:{{item.course}}-老师:{{item.teacher}}-时间是-{{item.time_start}}到{{item.time_end}}--描述:{{item.description}}-</li> {% endfor %}</ul></body></html>里面嵌套着一些jinja语法,那么data这个数据是从哪里来的呢,是在controllers/main.py中的MainController类中的一个函数:
@http.route('/ws_training/index', type='http', auth='public', csrf=False)def index(self, **kwargs): #-------------找到最近的课程--------------# course_model = http.request.env['ws.training.course'] #request对象其实是 course_list = course_model.sudo().search([]) #根据搜索条件得到记录 #if 判断到学生登陆了: 学生id 为 student_id data_list = [] # 格式化成2016-03-20 11:45:39形式 #ourTimeZone = pytz.timezone('Asia/Shanghai') currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) for obj in course_list: # 遍历list中的对象,每个对象其实是这个表中的一条记录 print "该条课程记录的课程开始时间是:",obj.time_start # 将格式字符串转换为时间戳,时间间隔是以秒为单位的浮点小数 print currentTime currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) currentTimeVal = time.mktime(time.strptime(currentTime, "%Y-%m-%d %H:%M:%S")) time_start_val = time.mktime(time.strptime(obj.time_start, "%Y-%m-%d %H:%M:%S")) + 8 * 60 * 60 time_end_val = time.mktime(time.strptime(obj.time_end, "%Y-%m-%d %H:%M:%S")) + 8 * 60 * 60 # 将数据库中的时间对应的时间戳转换回格式化字符串 # 1,首先转换成localtime time_start_local_val = time.localtime(time_start_val) time_end_local_val = time.localtime(time_end_val) # 2.#转换成新的时间格式(2016-05-05 20:28:54) true_time_start = time.strftime("%Y-%m-%d %H:%M:%S",time_start_local_val) true_time_end = time.strftime("%Y-%m-%d %H:%M:%S",time_end_local_val) if time_start_val >= currentTimeVal: #上课时间大于当前时间,签到是合法的 ——————简单模版 data_list.append({'teacher': obj.teacher_id.name, 'course': obj.name, 'time_start': true_time_start, 'time_end': true_time_end, 'description': obj.description, }) # print data_list template = env.get_template("index.html") return template.render(data=data_list) #---------------作者:...——————————————————————————#其主要功能是访问了数据库,然后通过一些逻辑处理之后得到数据,以列表的形式返回给前端。更多的了解可能需要jinja的深入了解了,未来有机会会继续深入学习。
而且,这个类也有一些特殊的性质:
class MainController(http.Controller): #Controller继承于object,它就定义了一个元类:ControllerType,目的:控制类的创建行为 #metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出来的“实例”。 #元类会删除掉类中的所有类属性,目的就是避免造成混淆
- 4.odoo入门——培训签到课程项目(二),后端逻辑
- 4.odoo入门——培训签到课程项目(一)
- 6.odoo入门——培训签到课程项目(三)
- 8.odoo入门——初探odoo后台启动过程(二)
- 19.odoo入门——odoo的session
- WordPress入门培训课程
- kafka入门(二)——kafka的逻辑结构
- 10.11.12.odoo入门——杂记
- 20.odoo入门——杂记
- 21.odoo入门——杂记
- 22.odoo入门——工作杂记
- 23.odoo入门——工作杂记
- 24.odoo入门——工作杂记
- SLAM学习——后端(二)
- 8.odoo入门——jinja2入门(一)
- 7.odoo入门——初探odoo后台启动过程(一)
- 18.odoo入门——odoo权限控制(一)模型(数据表)级别权限控制
- Oracle培训笔记 8.6 逻辑结构(二)
- [学习笔记] 点分治学习笔记
- 深度学习(Deep Learning) 学习笔记整理系列- 八
- 程序员,为什么写不好一份简历?
- 网络爬虫工作原理详解
- 指定环境变量
- 4.odoo入门——培训签到课程项目(二),后端逻辑
- spring学习之---spring的AOP
- 算法铺子之排序---插入排序
- PHP检测代码执行时间
- android ble OTA 和空中指令
- Shell脚本 centOS7中自动安装JDK
- Python 模块
- linux常用命令系列2
- 帝国cms搜索功能