1

特定の電子メールの受信トレイをスキャンするスクリプトがあります。その部分はうまく機能しており、興味のあるデータを取得できます。そのデータを取得して、情報を表示するために使用される Django アプリに追加したいと思います。

CRON ジョブでスクリプトを実行して定期的に新しい情報を取得することはできますが、そのデータを Django アプリに取り込むにはどうすればよいでしょうか?

それが違いを生む場合、DjangoサーバーはApache / FastCGIの下のLinuxボックスで実行されています。

[編集] - スリカーの質問に応えてWhen you are saying " get that data into the Django app" what exactly do you mean?...

Django アプリは、一連のビューを介して表示できるように、便利な形式でデータを保存する役割を果たします。そのため、アプリには、受信データを格納するための適切なメンバーを持つモデルが含まれます。Django に接続してこれらのモデル オブジェクトの新しいインスタンスを作成し、Django にそれらを保存するように指示する方法がわかりません。

4

8 に答える 8

3

セロリはあなたが探しているものだと思います。

于 2012-07-05T17:37:18.877 に答える
2

カスタム管理コマンドを記述して、必要に応じてデータをロードし、cronジョブを介してそのコマンドを実行できます。カスタムコマンドの作成を参照できます

既存のloaddataコマンドを試すこともできますが、アプリディレクトリに追加されたフィクスチャからデータを読み込もうとします。

于 2012-07-05T17:35:49.897 に答える
1

私も同じことをしました。

まず、私のスクリプトは既にメールを解析してデータベースに保存していたので、データベースを settings.py に設定し、python manage.py inspectdbそのデータベースに基づいてモデルを作成しました。

次に、db からの情報を表示するビューを作成するだけです。

スクリプトがまだ db を使用していない場合は、格納する情報を含むモデルを簡単に作成してから、スクリプトでモデルによって記述されたテーブルに強制的に書き込むことができます。

于 2013-04-20T21:19:17.610 に答える
0

「そのデータをDJangoアプリに取り込む」と言っているとき、正確にはどういう意味ですか?

ある種のデータベース(mysqlなど)を使用していると思います。cronジョブから収集したデータを、Djangoアプリがアクセスしているそれぞれのテーブルに挿入します。また、このcronデータをユーザーがアクセスしているのと同じテーブルに挿入します。そうすれば、同じテーブルのデータにアクセスするため、アプリを使用しているユーザーに変更がすぐに反映されます。

于 2012-07-05T17:35:39.383 に答える
0

最良の方法?

データの受信を処理するためにdjango側でビューを作成し、そのビューに登録されているURLに対してスクリプトにHTTPPOSTを実行させます。

スクリプト内からモデルなどをインポートすることもできますが、それはあまり良い考えではないと思います。

于 2012-07-05T17:35:42.410 に答える
0

このように、スクリプトで HTTP Post リクエストを送信します。これは図書館です

>>> files = {'report.xls': open('report.xls', 'rb')}

>>> r = requests.post(url, files=files)
>>> r.text

次に、受信側で web.py を使用して、このような情報を処理できます

x = web.input()

次に、xでやりたいことをします

POST リクエストの受信側で web をインポートし、投稿を処理する関数を記述します。

例えば

    def POST(self):

        x = web.input()
于 2012-07-05T17:40:13.917 に答える
0

HTTP を使用してメッセージを送受信したくない場合は、スクリプトで電子メール情報を .txt ファイルに書き込み、django アプリでファイルを開いて読み取ることができます。

編集:

たとえば午前 8 時に電子メールを読み取り、それをテキスト ファイル info.txt に書き込むように CRON ジョブを設定できます。あなたのコードに次のようなものを書きます

import time
    if '9' == time.strftime("%H"):
        file = open(info.txt)
        info = file.read()

これにより、午前 9 時から午前 10 時までファイルがチェックされます。1回だけチェックしたい場合は、分もifステートメントにも追加してください。

于 2012-07-05T18:35:52.953 に答える