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 校友身份,实用的实践顶点项目和顶级公司的工作协助。

为未来的职业做准备

立即申请软件工程硕士