2009-09-04 18 views
3

我有一個網站,定期從RSS提要中獲取信息(當然,目前手動,這是我的問題)。這目前是作爲正常的Django視圖實現的,在我看來這並不是很好。我想要一個使用cronjob運行的Python程序,而不是手動訪問正確的URL來更新信息。最簡單的方法來編寫一個訪問Django數據庫功能的Python程序

什麼是使Python程序可以訪問我的特定Django應用程序和Django ORM的最簡單方法?

+0

重複:http://stackoverflow.com/questions/579511/using-only-the-db-part-of-django – 2009-09-04 23:25:39

+0

重複:HTTP://計算器。 com/questions/302651/use-only-some-parts-of-django – 2009-09-04 23:26:42

回答

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) 

這就是我如何做到這一點的電子郵件發送方每日更新。 .py居住在我的django應用程序的根目錄下,所以導入設置會相應地反映出來。

+0

這非常有幫助。謝謝。 – 2009-09-05 10:26:23

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

注意:根據你如何做你的項目內導入,這可能沒有t完全按照所示工作。如果你總是在做一些像「從myproject.myapp.models導入*」,那麼你將要設置的cron線看起來更象這樣:

PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py 
0

我想有一個Python程序 這是運行使用cronjob而不是 手動訪問正確的URL 來更新信息。

一個簡單的選擇:寫一個cronjob到自動「訪問正確的URL更新信息」 - 可能是爲curlwget,畢竟那樣簡單。這並不能回答標題中的問題,但考慮到你解釋實際潛在問題的方式,它可能是解決問題的最簡單最直接的方法。

9

此處給出的所有方法的替代方法是將您的cron作業編寫爲自定義./manage.py命令。這很容易做到,並且可以在命令行或crontab中執行./manage.py yourcommand

The documentation對此非常稀疏,但它確實告訴您查看現有命令的代碼,您可以將它用作自己的模板。

+0

這工作完美無瑕;就像另外一個注意事項一樣,請記住,cron和apache是​​由不同的用戶擁有的,因此您可能會遇到環境問題(如代理,權限等)。 – 2009-09-05 07:46:48

+0

您可能可以將cron作業作爲apache用戶運行。 – 2009-09-05 12:43:39

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

相關問題