googleappengine:使用cron终止(或“取消发布”)实体

2024-10-03 21:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想模仿常见的CMS平台,比如Wordpress或Drupal的“已发布/未发布”功能。在

所以我有这份工作(ndb.型号)公司名称:

class Job(ndb.Model):
    title = ndb.StringProperty()
    published = ndb.StringProperty(default = "on")
    created = ndb.DateTimeProperty(auto_now_add = True)
    expire = ndb.DateTimeProperty()

NewJob处理程序如下所示:

^{pr2}$

保存的实体如下所示:

^{3}$

我的目标是将所有Job实体的Job设置为“publish==”off“',当它们的expire时间是今天(now)

所以我在克罗恩·亚姆在

cron: 
- description: expire job entities after 30 days
  url: /cron/job-expire
  schedule: every day 00:00

…并且/cron/job-expireurl由以下人员处理:

class CronJobExpire(BaseHandler):
    def get(self):
        jobs = Job.query(Job.published == "on").fetch()
        now = datetime.datetime.now()
        for job in jobs:
            if job.expire < now or job.expire == now:
                job.published = "off"

上面的CronJobExpire处理程序的目的是:

检查当前为published == "on"的作业实体列表,然后 检查它们的expire日期是now还是< now,如果是真的,则设置published == "off"。在

这不管用。我正在跟踪文件。任何帮助都将不胜感激-谢谢。在


Tags: 实体处理程序onjobnowcronclasspublished
1条回答
网友
1楼 · 发布于 2024-10-03 21:25:28

您需要保存更改的作业:

class CronJobExpire(BaseHandler):
    def get(self):
        jobs = Job.query(Job.published == "on").fetch()
        now = datetime.datetime.now()
        for job in jobs:
            if job.expire <= now:
                job.published = "off"    
                job.put()

另外,我建议只获取过期的作业:

^{pr2}$

或者,为了减少API调用从而提高速度:

now = datetime.datetime.now()    
jobs = Job.query(Job.published == "on", Job.expire <= now).fetch()
for job in jobs:
    job.published = "off"
ndb.put_multi(jobs)

最后,考虑作业.已发布布尔值:

published = ndb.BooleanProperty(default=True)

相关问题 更多 >