3

RSSフィードから定期的に情報を取得するWebサイトがあります(現在は手動で、これが私の問題です)。これは現在、通常のDjangoビューとして実装されていますが、私の意見ではあまり良くありません。正しいURLに手動でアクセスして情報を更新するのではなく、cronジョブを使用して実行されるPythonプログラムが欲しいのですが。

Pythonプログラムが私の特定のDjangoアプリケーションとDjangoORMにアクセスできるようにする最も簡単な方法は何ですか?

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

編集: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

ソース: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

注:プロジェクト内でインポートを行う方法によっては、これが示されているとおりに機能しない場合があります。「frommyproject.myapp.modelsimport*」のようなことを常に行っている場合は、cron行を次のように設定する必要があります。

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

正しいURLに手動でアクセスして情報を更新するのではなく、cronジョブを使用して実行されるPythonプログラムが欲しいのですが。

単純な代替手段:自動的に「正しいURLにアクセスして情報を更新する」ためのcronジョブを作成します。結局のところ、curlまたはのように単純な場合があります。wgetこれはタイトルの質問に答えるものではありませんが、実際の根本的な問題を説明する方法を考えると、それを解決するための最も簡単で最も直接的なアプローチかもしれません。

于 2009-09-04T20:58:46.053 に答える