djangoデバッグモードでメモリがオーバーフローしたピットとwerkzeugのデバッグモードを閉じる方法(プロジェクト起動時に表示される:Debugger is active!)

2372 ワード

一、djangoのデバッグモード
djangoのデバッグモードは強力ですが、このモードではすべてのSQLクエリーがメモリに保存されるので、プロジェクトがオンラインになったらデバッグモードをオフにし、メモリオーバーフローを避ける必要があります.自分のdjangoプロジェクトのメモリ消費量が上昇していることに気づいたら、慌てないでください.デバッグモードがオンになっただけかもしれません.
二、werkzeugのデバッグモード
セキュリティチームの同僚は、djangoプロジェクトのデバッグモードが開かれたことを注意してくれました.半日探して、djangoのデバッグモードではなくwerkzeugのデバッグモードが開かれていることに気づきました.では、どうやって閉じますか?
位置決めしてみるとdjango_extensionsライブラリのrunserver_plusコマンドはwerkzeugのインタフェース関数を呼び出します.そのため、独自のrunserver_を定義する必要があります.plusコマンド、django_を上書きextensionsライブラリのrunserver_plusコマンドは、werkzeugのインタフェースを呼び出すとデバッグモードを閉じます.手順は次のとおりです.
1.コマンドファイルのコピー
django_extensionsライブラリはdjangoのコマンド拡張ライブラリですrunserver_plusコマンドに対応するファイルは、そのインストールパスから私たちのプロジェクトのルートディレクトリにコピーされます.
python_path/dist-packages/django_extensions/management/commands/runserver_plus.py project_にコピーpath/management/commands/runserver_plus.py、python_pathはpythonライブラリのインストールパス、project_pathはプロジェクトのルートディレクトリです.
2.カスタムコマンドファイルの変更
プロジェクトの変更path/management/commands/runserver_plus.py,Command.inner_runメソッド呼び出しrun_Simpleのエントリuse_debuggerをFalseに変更しました.
        run_simple(
            self.addr,
            int(self.port),
            handler,
            use_reloader=use_reloader,
            use_debugger=True,
            extra_files=extra_files,
            reloader_interval=reloader_interval,
            reloader_type=reloader_type,
            threaded=threaded,
            request_handler=WSGIRequestHandler,
            ssl_context=ssl_context,
        )

に改心
        run_simple(
            self.addr,
            int(self.port),
            handler,
            use_reloader=use_reloader,
            use_debugger=False,
            extra_files=extra_files,
            reloader_interval=reloader_interval,
            reloader_type=reloader_type,
            threaded=threaded,
            request_handler=WSGIRequestHandler,
            ssl_context=ssl_context,
        )

3.プロジェクト構成の変更
修正するpyのINSTALLED_APPSアイテムは、私たちのプロジェクトのアプリケーションがdjango_に書かれていることを確認します.extensionsの前にrunserverをカスタマイズしましたplusコマンドはdjango_を上書きします.extensionsのrunserver_plusコマンド.
INSTALLED_APPS = [
    ...
    'project.ProjectConfig',  #           ,   django_extensions  
    'django_extensions',  #   django_extensions  
    ...
]

プロジェクトを再起動するとDebugger is activeが見つかります!のヒントはもうありません.