ホーム>source

Django開発サーバーが実行を開始する前に何かを実行させたいのですが。これを行うには、新しいアプリを作成し、それを INSTALLED_APPS の上部に追加しました 、次に management/commands/runserver.py を作成しました次のコードでアプリ内のファイル:

<前>ウィズウィズ

(もちろん、1行をstdoutに書き込むよりも実際にやりたいことは複雑ですが、これは問題を示す最も簡単な例です。 from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand class Command(RunserverCommand): def run(self, *args, **options): self.stdout.write('About to start running on ' + self.addr) super(Command, self).run(*args, **options) をオーバーライドする理由 、 run ではなくまたは他の方法は、 handle が必要だからですこのコードの実行時に既に設定されています。)

self.addr を実行すると 、「127.0.0.1で実行を開始しようとしています」という行が1回ではなく、サーバーが実行を開始する前に2回表示されます。なぜこれが起こっているのですか?それについて何ができますか?

./manage.py runserver
あなたの答え
  • 解決した方法 # 1

    自動リローダープロセスが原因であることが判明しました。オートリロードプロセスは、元と同じ引数を取得し、同じ初期化プロセスを実行します。解決策は、オートリローダーによって生成されたプロセスで実行されていない場合にのみ、プリサーバーコードを実行することでした。これは、環境変数を通じて検出できます。

    <前>ウィズウィズ

  • 解決した方法 # 2

    答えを取り消します。このサイトをサポートしたくありません。

    import os from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand class Command(RunserverCommand): def run(self, *args, **options): if os.environ.get('RUN_MAIN') != 'true': self.stdout.write('About to start running on ' + self.addr) super(Command, self).run(*args, **options)

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ java - 内部で使用するためにFacadeを呼び出してもよいですか?