首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django任务、提醒、通知

Django任务、提醒、通知
EN

Stack Overflow用户
提问于 2018-04-15 11:38:34
回答 2查看 3.7K关注 0票数 4

我在Django (Apache,Ubuntu)中有一个相当简单的web应用程序来保存一些会议文档。会议的预约时间以日期时间格式存储在数据库(postgres)中。现在,我希望有一个自定义的提醒模块,使用户能够设置他们的首选提醒。

例如:

会议将在某个日期举行(比如说2018年4月25日,晚上8:00 ),用户应该能够设置一个自定义提醒(例如,通过短信,但问题不是发送短信或电子邮件--我在开会前24小时收到了这一信息)。

这让我想到,这需要一个永久的过程,浏览会议表,检查now()是否是预约时间--24小时,如果是,那么执行提醒。

我从兔子和芹菜开始,但乍一看,这些看起来有点复杂(这是我找到的一个教程),看起来它不是为我所需要的而设计的。

因此,问题是-如何设置一个永久的进程来检查设置的提醒时间是否现在,如果是的话-执行提醒任务?

编辑:一些错误后,试图遵循教程的答案。被困在第三步:

代码语言:javascript
复制
    (dj2_env) adrian@dev:~$ celery -A dj2 worker -l info
Traceback (most recent call last):
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/app/utils.py", line 361, in find_app
    found = sym.app
AttributeError: module 'dj2' has no attribute 'app'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/adrian/dj2_env/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/__main__.py", line 14, in main
    _main()
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/celery.py", line 326, in main
    cmd.execute_from_commandline(argv)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/base.py", line 279, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/base.py", line 481, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/base.py", line 503, in find_app
    return find_app(app, symbol_by_name=self.symbol_by_name)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/app/utils.py", line 366, in find_app
    found = sym.celery
AttributeError: module 'dj2' has no attribute 'celery'

好的,找到了上面的错误--不过,奇怪的是,当我从dj2 (项目)目录运行worker命令时,它工作了8%

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-15 11:51:26

你可以用芹菜和兔子来做这个。芹菜中有一种叫做周期性任务的东西,它可以让你运行给定特定时间的任务,就像一份任务一样。

下面是芹菜中的异步任务的一个简单教程

它很好地理解了芹菜的工作原理。它还包括配置等。

您可能需要做的是启动一个任务(每15分钟一次),该任务在接下来的24小时内查询数据库并检查会议情况,然后通知用户。本教程的第4部分展示了如何使用定期任务。

票数 0
EN

Stack Overflow用户

发布于 2018-04-15 12:26:03

芹菜周期任务可能是最好的解决方案,但更简单的选择可能是从crontab运行的Django 自定义管理命令

管理命令将自动访问Django ORM,因此可以执行数据库检查和发送提醒。您可以从crontab运行它,如:

代码语言:javascript
复制
# Run the command every 15 minutes
*/15 * * * * python /path/to/manage.py your_command_name

如果有必要,使用管理命令还可以让您从命令行手动执行提醒过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49841474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档