代码之家  ›  专栏  ›  技术社区  ›  Muhammad Faizan Fareed

我如何在django中安排任务(包括开始日期和结束日期),以执行一些计算并将它们保存到数据库中?

  •  0
  • Muhammad Faizan Fareed  · 技术社区  · 7 年前

    三种模式:

    1. 使用者
    2. 购买会员

    每个成员都有开始日期和结束日期。用户可以购买会员资格及其存储在PurchasedMembership模型中的信息。

    我有3种解决问题的方法

    • 手动执行类似于当会员资格结束日期满足时调用

    我想要什么

    • 没有性能问题。
    • 如何处理比赛情况?
    • 如何安排任务?
    • 我的解决方案中哪一个是好的,它是如何实现的?

    Django模型

    class User(models.Model):
          #Django User Model 
    

    此模型存储成员详细信息。

    class Membership(models.Model):
           title = models.CharField(max_length=100)
           start_date = models.DateTimeField(auto_now_add=True)
           end_date=  models.BooleanField(default=None)
           total_membership =  models.IntegerField(default=0)
           price = models.IntegerField(default=0)   
           PurchasedMembership = models.ManyToManyField(settings.AUTH_USER_MODEL,through='PurchasedMembership',through_fields=('Membership ', 'user'))
    

    class PurchasedMembership(models.Model):
            Membership = models.ForeignKey(Membership,on_delete=models.CASCADE) 
            user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, default="")
           joined_date = models.DateTimeField(auto_now_add=True)
    
           class Meta:
                unique_together = ('Membership ', 'user',)
    

    将调用此方法以执行某些计算并将其保存到数据库中。

    def perform_Calculations(request):
           #Performing calculations 
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   bigEvilBanana    7 年前

    # tasks.py
    @app.task
    def check_membership_expired():
        # check if current_date >= expired_date
    

    from celery.schedules import crontab
    
    app.conf.beat_schedule = {
        # Executes every Monday morning at 7:30 a.m.
        'check_membership_expired-every-monday-morning': {
            'task': 'tasks.check_membership_expired',
            'schedule': crontab(hour=7, minute=30, day_of_week=1),
        },
    }
    
    推荐文章