3

我有一个网站,它定期从 RSS 提要中获取信息(嗯,目前是手动的,这是我的问题)。这目前是作为一个普通的 Django 视图实现的,在我看来这不是很好。我想要一个使用 cronjob 运行的 Python 程序,而不是手动访问正确的 URL 来更新信息。

使 Python 程序可以访问我的特定 Django 应用程序和 Django ORM 的最简单方法是什么?

4

5 回答 5

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 应用程序的根目录中,因此导入设置会相应地反映这一点。

于 2009-09-04T20:30:39.667 回答
9

此处给出的所有方法的替代方法是将您的 cron 作业编写为自定义./manage.py命令。这很容易做到,并且使您能够./manage.py yourcommand在命令行或 crontab 中进行操作。

这方面的文档很少,但它确实告诉您查看现有命令的代码,您可以将其用作自己的模板。

于 2009-09-04T21:27:12.843 回答
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

来源:https ://stackoverflow.com/a/18760222

于 2014-01-15T04:24:31.237 回答
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

注意:根据您在项目中进行导入的方式,这可能不会完全如图所示。如果您总是在执行“from myproject.myapp.models import *”之类的操作,那么您需要将 cron 行设置为看起来更像这样:

PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
于 2009-09-04T20:31:45.060 回答
0

我想要一个使用 cronjob 运行的 Python 程序,而不是手动访问正确的 URL 来更新信息。

一个简单的替代方案:编写一个 cronjob 来自动“访问正确的 URL 以更新信息”——毕竟可以像curlor一样简单。wget这并不能回答标题中的问题,但考虑到您解释真正潜在问题的方式,它可能是解决问题的最简单和最直接的方法。

于 2009-09-04T20:58:46.053 回答