【Django-Meeting系统】time.sleep()实现定时发邮件,并放在K8S服务器中-20220722

每次改完密码,记得重启pod!
每次改完密码,记得重启pod!
每次改完密码,记得重启pod!

效果:每隔一天发邮件来统计教室利用率

关键点1:django.setup()可以调用model模型的数据。

关键点2:进入pod内部启动 schedules.py(如果pod重启,则需要重新手动启动 schedules.py)

代码:

  • schedules.py放在manage.py同一路径下
import os, sys, time
import threading
import django
import schedule
from datetime import datetime
from django.db.models import Q

base_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
print(base_path)
# 将项目路径加入到系统path中,这样在导入模型等模块时就不会报模块找不到了
sys.path.append(base_path)
os.environ['DJANGO_SETTINGS_MODULE'] ='classroom_management.settings' # 注意:base_django_api 是我的模块名,你在使用时需要跟换为你的模块
django.setup()
# from base.models import ConfDict


from myclassroom.models import *
from myclassroom import ExchangeEmailSent

webmail_items = webmail.objects.all()



# 编辑邮件内容
def get_msg5(x1=0,x2=0,x3=0,x4=0):
    msg = '''
        <div>Dear all,</div>
        <div>教室使用状况汇总如下,请点击下方进行查看。</div>
        <a href='http://127.0.0.1:8000/query_booking_apply/'>查看链接</a>
        <div>今天教室预约为{0}笔</div>
        <div>今天教室已核准预约为{1}笔</div>
        <div>今天教室已核准的预定时数为{2}H</div>
         <div>今天教室利用率为{3}%</div>
        <div>承办人:WZS_HR</div>
        <div>邮件为自动发送,请不要直接回复。</div>
    '''.format(x1,x2,x3,x4)
    return msg


def count_minutes(timestr):
    mySecond = 0
    time_hour = int(timestr.split(':')[0])*60
    time_min = int(timestr.split(':')[1])
    Minutes_sum = time_hour + time_min
    return Minutes_sum


def confdict_handle():
    while True:
        try:
            loca_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            print('本地时间:'+str(loca_time))
            print('booking数量',len(booking.objects.all()))

            # 整理邮件内容
            booking_all = booking.objects.all()
            booking_times = len(booking_all.filter(Q(booking_date=datetime.now().date())))
            booking_agree_items = booking_all.filter(Q(booking_date=datetime.now().date())\
                                                             & Q(booking_approve_Y_N='Y'))
            booking_agree_times = len(booking_all.filter(Q(booking_date=datetime.now().date())\
                                                             & Q(booking_approve_Y_N='Y')))
            # 计算预约时数
            Hour_sum = 0
            if booking_agree_items:
                for each_booking_agree_items in booking_agree_items:
                    Minutes_sum = count_minutes(str(each_booking_agree_items.booking_end_time)) - count_minutes(str(each_booking_agree_items.booking_start_time)) + 1
                    Hour_sum = Hour_sum + Minutes_sum/60
            print('Hour_sum',Hour_sum)
            Hour_sum = round(Hour_sum,1)

            # 计算教室利用率
            use_percentage = 0
            classroom_hours = classroom.objects.filter(Q(classroom_active='Y')).count()*8
            try:
                use_percentage = round((Hour_sum / classroom_hours),4)*100
            except Exception as e:
                print('发生错误,错误信息为:', e)
                pass
            print('classroom_hours',classroom_hours)
            print('use_percentage',use_percentage)

            email_remark_2_new = get_msg5(x1=booking_times,x2=booking_agree_times,x3=Hour_sum,x4=use_percentage)
            print('email_remark_2_new',email_remark_2_new)
            #ExchangeEmailSent.send_exchange_mail(subject='【教室借订系统】教室使用状态通知-{0}'.format(datetime.now().date()),body=email_remark_2_new)

            time.sleep(60*60*24)

        except Exception as e:
            print('发生错误,错误信息为:', e)
            pass


def main():
    '''
    主函数,用于启动所有定时任务,因为当前定时任务是手动实现,因此可以自由发挥
    '''
    try:
        # 启动定时任务,多个任务时,使用多线程
        task1 = threading.Thread(target=confdict_handle)
        task1.start()
    except Exception as e:
        print('发生异常:%s' % str(e))

if __name__ == '__main__':
    main()

在pod内部启动schedules.py。

在这里插入图片描述

参考文章

https://blog.csdn.net/weixin_42782150/article/details/123212604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值