4.odoo入门——培训签到课程项目(二),后端逻辑

第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,首先转换成localtime
time_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创建出来的“实例”。
                                       #元类会删除掉类中的所有类属性,目的就是避免造成混淆



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Odoo项目实施是从入门到实战需要有一系列的步骤和工作流程。下面是一个简要的描述: 1. 系统了解与需求收集:首先,需要与客户进行沟通,了解他们的业务流程、需求和目标。通过面对面会议、问卷调查等方式收集需求细节,确保对Odoo项目的全面了解。 2. 功能设计与配置:根据收集到的需求,设计Odoo系统的功能模块。通过配置和设置Odoo的各个模块,满足客户的业务需求。这包括定义产品类型、制定销售流程和采购流程等。 3. 数据迁移与集成:将客户现有的数据从旧系统或Excel表格中导入到Odoo系统中。与其他系统的集成也需要进行,例如与会计软件的集成,以确保数据的一致性和准确性。 4. 测试与调试:在上线之前,进行系统的测试和调试。进行系统的功能测试、性能测试和安全测试,确保系统的稳定性和可靠性。 5. 培训与上线:针对客户的员工进行培训,使他们能够理解和使用Odoo系统。在培训期间,解答他们的问题,并提供技术支持。当培训完成后,上线系统,实现正式运营。 6. 运维与优化:管理和维护Odoo系统的运行,定期备份数据,监测系统的性能和安全。根据客户的反馈和业务需求,优化系统的功能和性能。 7. 持续改进:根据客户的反馈和业务需求,不断改进和扩展Odoo系统。通过添加新的模块、功能和集成,提高系统的效率和用户体验。 总之,Odoo项目实施需要充分理解客户需求,设计适合业务流程的系统,并保证系统稳定性和安全性。培训和支持客户使用系统,并持续改进和优化系统。这个过程需要耐心和专业技能,以确保项目的成功实施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值