0

Djangoの私のアプリケーションは、いくつかの非常に大きなSQLクエリを作成できます。私は現在、必要なデータに対してオブジェクトを使用し、次に、を使用して、ユーザーに表示したいものを返します。HttpRequestHttpResponse

明らかに、これらの多くのクエリのセットが実行されてデータベースから抽出されている間、ユーザーを1分間待機させてから、このモノロシックHTMLページを返すことができます。

理想的には、次のように、必要なときにページを更新したいと思います。

For i,e in enumerate(example):

    Table.objects.filter(someObjectForFilter[i]).

    #Return the object to the page.
    #Then Loop again, 'updating' the response after each iteration.

これは可能ですか?

4

2 に答える 2

4

最近、HttpResponseがジェネレーターになる可能性があることを発見しました。

def myview(request, params):
    return HttpResponse(mygenerator(params))


def mygenerator(params):
    for i,e in enumerate(params):
        yield '<li>%s</li>' % Table.objects.filter(someObjectForFilter[i])

これにより、結果がページに徐々に返され、表示用mygeneratorにHTMLでラップされ<li>ます。

于 2009-11-18T12:38:25.963 に答える
2

あなたのアプローチには少し欠陥があります。いくつかの異なるオプションがあります。

最初のものがおそらく最も簡単です-AJAXとHTTPRequestを使用してください。これらのシリーズがあり、それぞれが1つになりTable.objects.filter(someObjectForFilter[i]).ます。それぞれが終了すると、スクリプトが完了し、結果がクライアントに返されます。クライアントはUIを更新し、別のAJAX呼び出しを介して次のクエリを開始します。

もう1つの方法は、バッチシステムを使用することです。これは少し重いですが、データベースで実際の「重労働」を行う場合は、おそらくより良い設計です。着信タスクをスキャンするバッチデーモンを実行する必要があります(これにはcronプローブが問題なく機能します)。ユーザーは何かを実行したいので、リクエストはこのタスクを送信します(パラメーターを含むデータベースの行である可能性があります)。デーモンはそれを取得し、完全にオフラインで処理し(おそらく別のマシンでも)、結果が完了するとタスク行を更新します。その後、クライアントは定期的に更新して、従来の方法またはAJAXの方法でその行のステータスを確認できます。

于 2009-11-18T10:18:54.340 に答える