编写具有Django数据库功能访问权限的Python程序的最简单方法

时间:2009-09-04 20:16:21

标签: python django django-models django-orm

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

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

5 个答案:

答案 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

Credit


自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

答案 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   更新信息。

一个简单的替代方案:自动将 “访问正确的网址以更新信息” - 可以像curlwget一样简单所有。这并没有回答标题中的问题,但考虑到你解释真正的潜在问题的方法,它可能是解决它的最简单,最直接的方法。