我有一个网站,它定期从 RSS 提要中获取信息(嗯,目前是手动的,这是我的问题)。这目前是作为一个普通的 Django 视图实现的,在我看来这不是很好。我想要一个使用 cronjob 运行的 Python 程序,而不是手动访问正确的 URL 来更新信息。
使 Python 程序可以访问我的特定 Django 应用程序和 Django ORM 的最简单方法是什么?
我有一个网站,它定期从 RSS 提要中获取信息(嗯,目前是手动的,这是我的问题)。这目前是作为一个普通的 Django 视图实现的,在我看来这不是很好。我想要一个使用 cronjob 运行的 Python 程序,而不是手动访问正确的 URL 来更新信息。
使 Python 程序可以访问我的特定 Django 应用程序和 Django ORM 的最简单方法是什么?
from django.core.management import setup_environ
from django.core.mail import EmailMultiAlternatives, send_mail
from django.contrib.auth.models import User
import settings
from my.app.models import *
setup_environ(settings)
这就是我为每天通过电子邮件向各方发送更新的 cron 所做的。.py 位于我的 django 应用程序的根目录中,因此导入设置会相应地反映这一点。
此处给出的所有方法的替代方法是将您的 cron 作业编写为自定义./manage.py
命令。这很容易做到,并且使您能够./manage.py yourcommand
在命令行或 crontab 中进行操作。
这方面的文档很少,但它确实告诉您查看现有命令的代码,您可以将其用作自己的模板。
编辑:对于 Django 1.7
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun
自 Django 1.4 起已弃用所选答案
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
#from your_app_name import models
##have fun
你想要在你的 crontab 中这样的东西:
PYTHONPATH=/path/to/your/project DJANGO_SETTINGS_MODULE=settings myscript.py
然后你的 python 脚本应该以此开头:
#!/usr/bin/env python
from django.conf import settings
从那里,您应该能够导入您的模型/视图/表单/其他任何东西,并拥有一个非常像./manage.py shell
注意:根据您在项目中进行导入的方式,这可能不会完全如图所示。如果您总是在执行“from myproject.myapp.models import *”之类的操作,那么您需要将 cron 行设置为看起来更像这样:
PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
我想要一个使用 cronjob 运行的 Python 程序,而不是手动访问正确的 URL 来更新信息。
一个简单的替代方案:编写一个 cronjob 来自动“访问正确的 URL 以更新信息”——毕竟可以像curl
or一样简单。wget
这并不能回答标题中的问题,但考虑到您解释真正潜在问题的方式,它可能是解决问题的最简单和最直接的方法。