我有一个网站定期从RSS Feed中提取信息(好吧,目前手动,这是我的问题)。目前这是作为普通的Django视图实现的,在我看来这不是很好。我想要一个使用cronjob运行的Python程序,而不是手动访问正确的URL来更新信息。
让Python程序访问我的特定Django应用程序和Django ORM的最简单方法是什么?
答案 0 :(得分:13)
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应用程序的根目录中,因此导入设置会相应地反映出来。
答案 1 :(得分:9)
此处给出的所有方法的替代方法是将您的cron作业编写为自定义./manage.py
命令。这很容易做到,并且您可以在命令行或crontab中执行./manage.py yourcommand
。
The documentation对此非常稀疏,但它会告诉您查看现有命令的代码,您可以将其用作自己的模板。
答案 2 :(得分:2)
编辑:适用于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
答案 3 :(得分:0)
你想在你的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
注意:根据您在项目中的导入方式,这可能无法完全按照显示的方式工作。如果你总是在做“从myproject.myapp.models import *”这样的事情,那么你需要设置cron行看起来更像这样:
PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
答案 4 :(得分:0)
我想要一个Python程序 这是使用cronjob运行的 手动访问正确的URL 更新信息。
一个简单的替代方案:自动将curl
或wget
一样简单所有。这并没有回答标题中的问题,但考虑到你解释真正的潜在问题的方法,它可能是解决它的最简单,最直接的方法。