6

Djangoの起動時に(データベースから)いくつかの変数を初期化したい。

データベースからデータを取得することはできますが、問題は、initializeメソッドをどのように呼び出す必要があるかです。そして、これは一度だけ呼び出されるべきです。

他のページを調べてみましたが、答えが見つかりませんでした。

現在、コードは次のようになっています::


def get_latest_dbx(request、....):

#データベースからデータを取得する


def get_latest_x(request):

get_latest_dbx(request、x、...)


def startup(request):

get_latest_x(request)

4

2 に答える 2

6

一部の人々は(Djangoが一度だけ起動するときにコードを実行しますか?)トップレベルのurls.pyでその初期化を呼び出すことを提案します(これは珍しいように見えます、urls.pyはurlパターンを処理することになっています)。ミドルウェアを作成することによる別の回避策があります:Djangoスタートアップコードをどこに置くか? しかし、ほとんどの人はチケットが解決されるのを待っていると思います。

アップデート:

OPが質問を更新したので、ミドルウェアの方法の方が良いようです。彼は実際requestに起動時にオブジェクトを必要としているからです。process_requestすべてのスタートアップコードは、カスタムミドルウェアのメソッドに入れることができます。この場合、requestオブジェクトは最初の引数で使用できます。これらのスタートアップコードが実行された後、後で再実行されないようにフラグが設定される場合があります(MiddlewareNotUsed例外の発生は、でのみ機能し__init__request引数を受け取りません)。

ところで、OPの要件は少し奇妙に見えます。一方では、Djangoの起動時にいくつかの変数を初期化する必要がありますが、他方でrequestは、初期化にオブジェクトが必要です。ただし、Djangoが起動すると、着信リクエストがまったくない場合があります。たとえあったとしても、あまり意味がありません。彼が実際に必要としているのは、セッションまたはユーザーごとに初期化を行うことかもしれません。

于 2013-01-25T07:08:41.293 に答える
1

これにはいくつかのチートがあります。一般的な解決策は、いくつかの特別な場所に初期コードを含めようとしているため、サーバーが起動すると、それらのファイルが実行され、コードも実行されます。

settings.pyファイルを入れようとしたことprint 'haha'がありますか:)?

注: settings.pyは起動時に2回実行されることに注意してください

于 2013-01-25T07:02:33.137 に答える