RSSフィードから定期的に情報を取得するWebサイトがあります(現在は手動で、これが私の問題です)。これは現在、通常のDjangoビューとして実装されていますが、私の意見ではあまり良くありません。正しいURLに手動でアクセスして情報を更新するのではなく、cronジョブを使用して実行されるPythonプログラムが欲しいのですが。
Pythonプログラムが私の特定のDjangoアプリケーションとDjangoORMにアクセスできるようにする最も簡単な方法は何ですか?
RSSフィードから定期的に情報を取得するWebサイトがあります(現在は手動で、これが私の問題です)。これは現在、通常のDjangoビューとして実装されていますが、私の意見ではあまり良くありません。正しいURLに手動でアクセスして情報を更新するのではなく、cronジョブを使用して実行されるPythonプログラムが欲しいのですが。
Pythonプログラムが私の特定のDjangoアプリケーションとDjangoORMにアクセスできるようにする最も簡単な方法は何ですか?
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のいずれかで実行できます。
これに関するドキュメントは非常にまばらですが、既存のコマンドのコードを確認するように指示されています。これは、独自のテンプレートとして使用できます。
編集:Django1.7の場合
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun
選択した回答はDjango1.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
注:プロジェクト内でインポートを行う方法によっては、これが示されているとおりに機能しない場合があります。「frommyproject.myapp.modelsimport*」のようなことを常に行っている場合は、cron行を次のように設定する必要があります。
PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
正しいURLに手動でアクセスして情報を更新するのではなく、cronジョブを使用して実行されるPythonプログラムが欲しいのですが。
単純な代替手段:自動的に「正しいURLにアクセスして情報を更新する」ためのcronジョブを作成します。結局のところ、curl
またはのように単純な場合があります。wget
これはタイトルの質問に答えるものではありませんが、実際の根本的な問題を説明する方法を考えると、それを解決するための最も簡単で最も直接的なアプローチかもしれません。