Django 應用程序:2022 年你需要知道的一切
已發表: 2021-01-04Django 是由專業人士構建的頂級 Python 框架之一,它鼓勵 Web 開發人員進行務實的設計和快速開發。 它快速、安全,是 Web 開發人員的最愛。 Django 有一個已經安裝的應用程序註冊表,它存儲配置並幫助提供自省。 它維護了一個完整的可用模型列表。 註冊表稱為應用程序。 Django 應用程序在“django.apps”中可用
>>> 從 django.apps 導入應用程序
>>> apps.get_app_config('admin').verbose_name
'行政'
目錄
Django 項目
任何 Django 應用程序都可以稱為一個項目。 它由設置模塊定義。 但是,它還包含其他一些內容。 例如,如果您運行django-admin startproject mysite,那麼您將獲得一個 mysite 項目目錄。 這將包含一個帶有setting.py、urls.py、asgi.py和wsgi.py的 mysite Python 包。 該包通常可以擴展,使其包含 CSS、fixture 和其他與任何特定應用程序無關的模板。
項目的根目錄或有manage.py的目錄通常包含所有項目的應用程序,這些應用程序沒有單獨安裝。

Django 應用程序
應用程序是指具有某些功能的 Python 包。 它可以在多個項目中重複使用。 應用程序可以是視圖、模型、模板 URL、靜態文件等的組合。它們通常連接到具有INSTALLED-APPS設置的項目中。 它通常可以選擇與其他機制連接,例如作為MIDDLEWARE設置的 URLconfs。
閱讀:印度的 Django 開發人員薪水
Django 應用程序是一個代碼集,它創建與特定框架的多個部分的交互。 它沒有 Application 對象。 有時,Django 可能需要與某些應用程序交互以進行自省或配置。 因此, AppConfig中有已安裝應用程序的元數據。 一個項目包也可以被認為是一個應用程序,它也可以有模型。
配置 Django 應用程序
如果你想配置一個應用程序,你必須繼承 AppConfig ,然後在INSTALLED_Apps中添加一條虛線。 當它得到虛線時,Django 開始檢查default_app_config變量。 一旦定義,它就成為該特定應用程序的AppConfig子類。 如果沒有創建default_app_config ,Django 將使用基礎AppConfig類。
另請閱讀:全棧和平均棧的區別
對於 Django 應用程序的作者
假設您正在開發一個“搖滾樂”的可插拔應用程序。 然後,您可以通過以下方式開發名稱:
#rock_n_roll/apps.py
從 django.apps 導入 AppConfig
RockNRollConfig 類(AppConfig):
名稱 = 'rock_n_roll'
verbose_name = “搖滾”
您還可以使用以下方法將其加載為 AppConfig 子類:
#rock_n_roll/__init__.py
default_app_config = 'rock_n_roll.apps.RockNRollConfig'
因此,當“rock_n_roll”出現在已安裝的應用程序中時,可以使用 RockNRollConfig。 它將幫助您使用 AppConfig 的功能,而無需用戶在 INSTALLED_APPS 中進行更新。
對於應用程序的用戶
假設您在一個名為 anthology 的項目中使用搖滾樂應用程序。 現在,您希望它在此之前以 Jazz Manouche 的形式出現。 因此,您可以按照以下步驟操作:
# 選集/apps.py
從 rock_n_roll.apps 導入 RockNRollConfig
JazzManoucheConfig 類(RockNRollConfig):
verbose_name = “爵士馬努切”
# 選集/settings.py
安裝應用程序 = [
'anthology.apps.JazzManoucheConfig',
#…
]
類AppConfig
應用程序的元數據存儲在應用程序配置對像中。 其中一些屬性在 AppConfig 子類中配置,它們被設置為只讀或由 Django 設置。

可配置的屬性
AppConfig.name
路徑:django.contrib.admin
它有助於定義應用配置的應用程序。 它在 AppConfig 子類中設置。 在 Django 項目中獨一無二。
AppConfig.label
名稱:管理員
有助於重新標記應用程序,尤其是在其中兩個具有衝突標籤的情況下。 默認情況下,它成為名稱的最後一個組成部分。 必須是 Python 的有效標識符。 在 Django 項目中獨一無二。
AppConfig.verbose_name
名稱:行政
默認為:label.title()
AppConfig.path
應用程序目錄示例:'/usr/lib/pythonX.Y/dist-packages/django/contrib/admin'
在很多情況下,Django 可以自動檢測並設置它,但您可以通過 AppConfig 子類顯式覆蓋類屬性。
只讀屬性
AppConfig.module
根模塊示例:<module 'django.contrib.admin' from 'django/contrib/admin/__init__.py'>
AppConfig.models_module
帶有模型的模塊示例:<module 'django.contrib.admin.models' from 'django/contrib/admin/models.py'>
如果它不包含模型,它也可以是 None。
方法
AppConfig.get_models()
它將有助於為應用程序返回一個可迭代的模型類。 它將要求完全填充應用程序註冊表。
AppConfig.get_model
返回不區分大小寫的特定模型:model_name。 型號名稱
如果不存在特定模型,則有助於引發 LookupError。 它將要求完全填充應用程序註冊表。
AppConfig.ready()
它可以幫助覆蓋該方法,從而執行諸如註冊信號之類的初始化任務。 註冊表完全填充後可以調用。 但是,您不能在定義 AppConfig 類的模塊級別導入模型。 但是,您可以在使用 get_model() 或 import 語句的 ready() 中導入它們。
用作應用程序的命名空間包
當 Python 包沒有 __init__.py 時,它們被稱為命名空間包。 它們可以分佈在 sys.path 上的多個目錄和位置。 Django 應用程序將需要一個符號庫文件系統,Django 基於配置將在其中查找靜態資產、模板等。因此,只有以下條件之一為真,才能使用 Django 應用程序:
- 命名空間包只有一個位置。
- 用於配置應用程序的 AppConfig 類具有路徑類屬性。
如果不滿足任何條件,則 Django 將顯示 ImproperlyConfigured。
Django 應用程序註冊表
某些公共 API 由應用程序註冊表提供。 這些是一些方法,儘管它們可能會改變:
應用程序就緒
當布爾屬性設置為 True 並且註冊表已完全填充並且因此調用所有 AppConfig.ready() 方法時。
應用程序.get_app_configs()
它將返回一個可迭代的 AppConfig 實例。
apps.get_app_config(app_label)
它將為具有給定 app_label 的應用程序返回 AppConfig。 如果不存在應用程序,它將引發 LookupError。
apps.is_installed( 它將檢查當前註冊表中是否存在給定應用程序的名稱。 app_name 將是一個應用全名,例如:django.contrib.admin
apps.get_model( 它將返回具有給定 model_name 和 app_label 的模型。 如果不存在應用程序,它將引發 LookupError。
初始化過程
所以,現在的問題是如何加載 django 應用程序。 當 Django 啟動時,django.setup() 將填充註冊表。
設置(設置前綴=真)
Django 配置發生:
- 通過第一次加載設置
- 記錄設置
- 如果 set_prefix 為真,則 URL revolver 腳本前綴將變為 FORCE_SCRIPT_NAME(如果已定義或以其他方式)。
- 應用程序註冊表已初始化。
自動調用函數發生:

- 當 HTTP 服務器通過 Django 的 WSGI 支持運行時
- 調用管理命令時。
疑難解答
人們可能面臨的一些常見問題是:
- AppRegistryNotReady:在導入應用程序配置或模型模塊期間發生,觸發不依賴於應用程序註冊表的代碼。 如果您使用 ORM 執行數據庫查詢,則可能會出現此問題。
- ImportError: cannot import name ... – 當導入序列以循環結束時發生。 您可以通過最小化模型模塊之間的依賴關係來消除該過程。
- Django.contrib.admin 會自動發現管理模塊。 將 INSTALLED_APPS 從 django.contrib.admin 更改為 django.contrib.admin.apps.SimpleAdminConfig 以防止它發生。
希望現在您可以輕鬆地將 Django 應用程序集成到您的 Web 開發中。
從世界頂級大學獲得軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
結論
如果您有興趣了解有關 Django 和其他全棧開發人員語言和工具的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,並提供 500 多個小時的嚴格培訓, 9 個以上的項目和任務,IIIT-B 校友身份,實用的實踐頂點項目和頂級公司的工作協助。
