Django 應用程序:2022 年你需要知道的一切

已發表: 2021-01-04

Django 是由專業人士構建的頂級 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.pywsgi.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 校友身份,實用的實踐頂點項目和頂級公司的工作協助。

為未來的職業做準備

立即申請軟件工程碩士