Django 開発者モードでは自動リロードはどのように実装されますか?
Django アプリケーションの開発プロセスでは、開発者モードを使用してサービスを開始するのが特に便利です。サービスを実行するために必要なのは python manage.py runserver だけです。これは、非常にユーザーフレンドリーな自動リロード メカニズムを提供します。プログラムを手動で再起動してコードを変更し、フィードバックを確認できます。初めて触れたときは、「もっと使いやすい機能だ」という印象で、特に高度な技術だとは思いませんでした。後で時間があるときに、このオートリロードを実装する場合はどうするかを考えましたが、ずっと考えてもわかりませんでした。私の最初の反応は、自分には野心がありすぎてスキルが不足しているということでした。そこで私は、Django が自動リロードを実装する方法を少し時間をかけて研究し、すべてのステップのソース コードを確認しました。
1. Runserver コマンド。本題に入る前に、runserver コマンドの実行方法については実際には意味のないことがたくさんありますが、本題とはほとんど関係がないので、簡単に説明します。
コマンド ラインで python manage.py runserver と入力した後、 Django は runserver コマンドの実行モジュールを探し、最終的に
#django\contrib\staticfiles\management\commands\runserver.pyfrom django.core.management.commands.runserver import \ Command as RunserverCommandclass Command(RunserverCommand): help = "Starts a lightweight Web server for development and also serves static files."
#django\core\management\commands\runserver.pyclass Command(BaseCommand): def run(self, **options): """ Runs the server, using the autoreloader if needed """ use_reloader = options['use_reloader'] if use_reloader: autoreload.main(self.inner_run, None, options) else: self.inner_run(None, **options)
実際、autoreload.main のパラメータから、autoreload のメカニズムがこれらのカプセル化に含まれていることがわかります。
#django\utils\autoreload.py:def main(main_func, args=None, kwargs=None): if args is None: args = () if kwargs is None: kwargs = {} if sys.platform.startswith('java'): reloader = jython_reloader else: reloader = python_reloader wrapped_main_func = check_errors(main_func) reloader(wrapped_main_func, args, kwargs)
#django\utils\autoreload.py:def python_reloader(main_func, args, kwargs): if os.environ.get("RUN_MAIN") == "true": thread.start_new_thread(main_func, args, kwargs) try: reloader_thread() except KeyboardInterrupt: pass else: try: exit_code = restart_with_reloader() if exit_code < 0: os.kill(os.getpid(), -exit_code) else: sys.exit(exit_code) except KeyboardInterrupt: pass
#django\utils\autoreload.py:def restart_with_reloader(): while True: args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv if sys.platform == "win32": args = ['"%s"' % arg for arg in args] new_environ = os.environ.copy() new_environ["RUN_MAIN"] = 'true' exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ) if exit_code != 3: return exit_code
の説明を見てください。
_spawnvef(mode, file, args, env, execve)
#django\utils\autoreload.py:def python_reloader(main_func, args, kwargs): if os.environ.get("RUN_MAIN") == "true": thread.start_new_thread(main_func, args, kwargs) try: reloader_thread() except KeyboardInterrupt: pass else: try: exit_code = restart_with_reloader() if exit_code < 0: os.kill(os.getpid(), -exit_code) else: sys.exit(exit_code) except KeyboardInterrupt: pass
#django\utils\autoreload.py:from django.utils.six.moves import _thread as thread
[codeblock six]#django\utils\six.pyclass _SixMetaPathImporter(object):"""A meta path importer to import six.moves and its submodules. This class implements a PEP302 finder and loader. It should be compatible with Python 2.5 and all existing versions of Python3"""官网说明:# https://pythonhosted.org/six/Six: Python 2 and 3 Compatibility Library Six provides simple utilities for wrapping over differences between Python 2 and Python 3. It is intended to support codebases that work on both Python 2 and 3 without modification. six consists of only one Python file, so it is painless to copy into a project.
ensure_echo_on() 実は、これは unix 風のシステムファイル処理のためのもののようですので、最初はスキップしてください。システムファイル操作に関連する変数 inotify が利用可能かどうかに基づいてファイル変更を検出する方法を選択します。
ループ中、1秒ごとにファイルのステータスをチェックします。通常のファイルに変更があった場合、プロセスは終了コード3で終了します。メインプロセスは終了コードが3であることを確認すると、子プロセスを再起動します。プロセス。 。 。 。これは、通常のファイル変更ではなく、I18N_MODIFIED (拡張子 .mo が付いているファイル変更、バイナリ ライブラリ ファイルなど) の場合は、reset_translations に関連します。これは、おそらく次回ロードされたライブラリ キャッシュをクリアすることを意味します。 。上記はオートリロード機構のプロセスです。さまざまなオペレーティング システムでのファイル変更の検出など、特に明確ではない詳細がまだいくつかありますが、これらは非常に詳細なものであり、メインのプロセスには関与しません。これを読んだ後、私はオートリロード機構の設計を頼まれたらどうするだろうかと改めて自問しました。私の答えは、「djangoutilsautoreload.py ファイルを直接使用する」です。実際、これは非常に独立したモジュールであり、汎用の自動リロード ソリューションとして使用することもできます。
以上がDjango 開発者モードでは自動リロードはどのように実装されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Django のバージョンを確認する手順: 1. ターミナルまたはコマンド プロンプト ウィンドウを開きます; 2. Django がインストールされていることを確認します Django がインストールされていない場合は、パッケージ管理ツールを使用してインストールし、 pip install django コマンドを入力します。 3. インストールが完了したら、python -m django --version を使用して Django のバージョンを確認できます。

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Django は、Web 開発ライフサイクルのあらゆる側面をカバーする完全な開発フレームワークです。現在、このフレームワークは世界中で最も人気のある Web フレームワークの 1 つです。 Django を使用して独自の Web アプリケーションを構築する場合は、Django フレームワークの長所と短所を理解する必要があります。具体的なコード例も含め、知っておくべきことはすべてここにあります。 Django の利点: 1. 迅速な開発 - Django は Web アプリケーションを迅速に開発できます。豊富なライブラリと内部を提供します。

違いは次のとおりです。 1. Django 1.x シリーズ: これは、バージョン 1.0、1.1、1.2、1.3、1.4、1.5、1.6、1.7、1.8、および 1.9 を含む、Django の初期バージョンです。これらのバージョンは主に基本的な Web 開発機能を提供します; 2. Django 2.x シリーズ: これは、2.0、2.1、2.2 およびその他のバージョンを含む Django の中期バージョンです; 3. Django 3.x シリーズ: これは最新バージョンですDjango シリーズ。バージョン 3.0、3 などを含む。

Django バージョンをアップグレードする方法: 手順と考慮事項、必要な特定のコード例 はじめに: Django は、より優れたパフォーマンスとより多くの機能を提供するために継続的に更新およびアップグレードされる強力な Python Web フレームワークです。ただし、古いバージョンの Django を使用している開発者にとって、Django のアップグレードはいくつかの課題に直面する可能性があります。この記事では、Djangoのバージョンアップの手順や注意点、具体的なコード例を紹介します。 1. Djan をアップグレードする前にプロジェクト ファイルをバックアップします。

Django のバージョンを確認する方法: 1. コマンド ラインで確認するには、ターミナルまたはコマンド ライン ウィンドウで「python -m django --version」コマンドを入力します。 2. Python 対話型環境で確認するには、「import django」と入力します。 print(django.get_version())" code; 3. Django プロジェクトの設定ファイルを確認し、インストールされているアプリケーション情報を含む INSTALLED_APPS という名前のリストを見つけます。

バックエンドは django です。詳細: Django は主にバックエンド フレームワークですが、フロントエンド開発と密接に関連しています。 Django のテンプレート エンジン、静的ファイル管理、RESTful API などの機能を通じて、フロントエンド開発者はバックエンド開発者と協力して、強力でスケーラブルな Web アプリケーションを構築できます。

1月9日の当サイトのニュースによると、天猫エルフは最近、ゆんゆんアクセスサービスのアップグレードを発表し、アップグレードされたゆんゆんアクセスサービスは1月1日から無料モードから有料モードに変更される。このサイトには新機能と最適化が含まれています: クラウド プロトコルを最適化してデバイス接続の安定性を向上、主要カテゴリの音声制御を最適化、アカウント認証のアップグレード: Tmall Genie に開発者のサードパーティ アプリの表示機能を追加して、ユーザーがより速く更新できるようにしますアカウントのバインドに便利であり、同時に、開発者向けのサードパーティのアプリアカウント認証が追加され、Tmall Elf アカウントのワンクリックバインドをサポートし、端末画面の表示インタラクション機能が追加されました。音声インタラクションに加えて、 、ユーザーはアプリと画面のスピーカーを通じてデバイスを制御し、情報を取得できます。機器のステータス、新しいインテリジェントなシーン連携機能、新しい製品の属性とイベント、Tmall を定義するステータスまたはイベントとして報告できます。
