Djangoのデータベース機能にアクセスしてPythonプログラムを書くための最も簡単な方法

StackOverflow https://stackoverflow.com/questions/1381346

質問

私は(現在は手動で、まあ、これは私の問題である)、定期的にRSSフィードから情報を取得し、ウェブサイトを持っています。これは、現在、私の意見では非常に素晴らしいではない通常のDjangoのビューとして実装されます。私は情報を更新するcronジョブを使用しての代わりに、手動で正しいURLを訪れて実行されるPythonプログラムを持っているしたいと思います。

Pythonプログラムは、私の特定のDjangoアプリケーションとDjangoのORMへのアクセス権を持たせるための最も簡単な方法は何ですか?

役に立ちましたか?

解決

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アプリケーションのルートに住んでいます。

他のヒント

すべてここに与えられたアプローチに代わるものは、カスタム./manage.pyコマンドとして、あなたのcronジョブを作成することです。これは非常に簡単に行うことです、そしてあなたに、コマンドラインまたはあなたのcrontabのいずれかで./manage.py yourcommandを行う能力を与えます。

この上の文書には非常に希薄であるが、それはあなたがあなた自身のためのテンプレートとして使用することができ、既存のコマンドのためのコードを見て、あなたを教えてくれない。

編集:Djangoの1.7の場合

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun

クレジット

<時間>

は選択した答えがあるの非推奨のジャンゴ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

あなたは、あなたの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インポートから」のようなものをやっている場合は、より多くの本のように見えるようにセットcronのラインになるでしょう
PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
  

私は、Pythonプログラムを持っているしたいのですが   その代わりに、cronジョブを使用して実行されます   手動で正しいURLを訪問します   情報を更新します。

単純な代替:にcronジョブを作成し、の自動的の「情報を更新するための正しいURLにアクセスしてください」 - すべての後、curlまたはwgetような単純なようである可能性があります。これは、タイトルに質問に答える、しかし、あなたはそれだけでそれを解決するための最も簡単で即時的なアプローチであるかもしれないあなたの本当の根本的な問題を説明する方法は与えられません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top