Code前端首页关于Code前端联系我们

Django框架标准文件全面解析文件结构和设计原理

terry 2年前 (2023-09-24) 阅读数 65 #后端开发

在Python Web开发中,Django框架的地位就是闪亮的明星。其全面、有效、安全的特点使其风靡全球。本文将深入解析Django框架的标准文件,深入探讨每个文件及其组件的含义和用途,彻底展示这个强大框架的文件结构和设计原理。

首先我们看一下新建Django项目后的目录结构:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py:这是Django项目的命令行工具,可以用来执行许多与项目管理和开发任务,例如运行服务器、运行测试、创建数据库模式等。
  • myproject/__init__.py:这是一个空文件,用于告诉 Python 解释器该目录是一个 Python 包。
  • myproject/settings.py:该文件包含所有项目配置。每个 Django 项目都有自己的设置,您可以在其中配置数据库、应用程序、中间件、模板、缓存等。
  • myproject/urls.py:此文件定义项目的 URL 路由。通过编写 URL 模式和相应的视图函数,Django 可以将 HTTP 请求定向到适当的视图。
  • myproject/asgi.pymyproject/wsgi.py:这两个文件用于配置服务器。 WSGI是Python的Web服务器网关接口,ASGI是异步服务器网关接口。 ,用于处理异步请求。

manage.py

在Django项目结构中,manage.py起着非常重要的作用。它是一个命令行工具,允许您以各种方式与 Django 项目交互。让我们深入探讨这个文件及其主要用途。

首先,当我们创建一个新的Django项目时,Django会自动创建一个manage.py文件。它位于项目的根目录中,其主要用途是作为命令行工具。它封装了 django-admin.py 的功能,还包含一些特定于项目的附加命令。

我们看一个典型的manage.py文件内容:

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys

def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

if __name__ == '__main__':
    main()

我们可以看到,在manage.pys文件中,Djan文件被定义为变量。 DJANGO_SETTINGS_MODULE,默认值为“myproject.settings”。接下来,它尝试从 django.core.management 导入 execute_from_command_line。该函数用于执行命令行管理任务。

我们来看看manage.py的几个常见用法:

运行开发服务器:当开发服务器需要在本地运行时,我们经常会使用 Djan 。您可以使用命令 runserver:

python manage.py runserver

来完成此操作,这将默认在 127.0.0.1:8000 启动开发服务器。您可以在浏览器中访问该地址来查看您的网站。

数据库迁移:Django有非常强大的数据库抽象API,可以处理许多与数据库相关的任务。例如,当我们更改模型时,我们需要将这些更改应用到数据库,这需要数据库迁移。以下是使用 manage.py 的操作方法:

python manage.py makemigrations  # 创建迁移文件
python manage.py migrate  # 应用迁移至数据库

创建超级用户 :当我们需要访问 Django 的管理后端时,我们需要创建一个超级用户。我们可以使用以下命令来完成:

python manage.py createsuperuser

Django Shellmanage.py还提供了一个交互式Python shell,但这个shell运行在Django环境中。这意味着你可以将你的模型、视图、设置等导入到这个 shell 中,这对于测试和调试非常有用:

python manage.py shell

在 Django 的日常使用中,manage.py 是一个非常重要的工具的。它使得与 Django 项目的交互变得非常简单,并且封装了许多常见的任务。学会使用manage.py,你的Django开发将会变得更加容易。

__init__.py

在Python中,__init__.py文件起着重要作用。它的存在使得Python能够将该目录识别为一个包。这个概念在Python的模块化编程中尤为重要,它可以让我们更加结构化地组织代码,并提供更好的命名空间管理。现在我们深入了解一下__init__.py的作用和使用。

首先我们看一下最简单的__init__.py文件,它是一个空文件。在Python项目中,你可以看到很多这样的文件。它们位于包的库中,名为 __init__.py

# mypackage/__init__.py

这个空文件的存在意味着Python解释器会将其放置的目录视为一个包,而这个包可能包含其他模块或子包。例如,如果我们有以下项目结构:

mypackage/
    __init__.py
    module1.py
    module2.py

在这种情况下,我们可以像这样导入模块:

from mypackage import module1, module2

除了将文件夹标记为包之外,__init__.py 还有其他一些重要用途。一般来说,__init__.py用于存储包级初始化代码或定义别名以便于导入。例如,我们可以在__init__.py中导入我们的模块,这样导入包的时候就可以直接使用这些模块了:

# mypackage/__init__.py

from . import module1, module2

然后我们就可以直接导入包了,不需要单独导入模块:

import mypackage

# 我们可以直接使用mypackage.module1,而不需要单独导入module1
mypackage.module1.some_function()

__init__.py 也可用于定义 __all__ 变量。变量 __all__ 是一个字符串列表,用于定义从包导入时导入哪些模块。

# mypackage/__init__.py

__all__ = ['module1', 'module2']

当我们现在像这样导入时:

from mypackage import *

只有module1module2不会被导入。

一般来说,__init__.py是Python包结构的重要组成部分,它可以让我们更好地组织和管理我们的代码。了解它的工作原理以及如何使用它可以帮助我们编写更加模块化和可维护的代码。

settings.py

Django 框架是一个以其模块化和灵活性而闻名的 Web 框架。很多方面都可以配置,这些配置都集中在文件settings.py中。在 Django 项目中,文件 settings.py 至关重要。它包含运行项目所需的所有配置信息。现在让我们深入探讨这个文件及其主要用途。

新建的Django项目中的settings.py文件包含许多默认配置。这些默认配置适用于大多数情况,但您可以根据需要更改这些配置。以下是一些最重要的选项:

DEBUG:此选项告诉 Django 是否以调试模式运行。在开发环境中,我们通常将其设置为True,这样当发生错误时,Django会显示详细的错误信息。但在生产环境中我们应该将其设置为False。

DEBUG = True

INSTALLED_APPS:此选项定义项目中的所有应用程序。每个应用程序都是一个Python包,其中包含一些视图、模型、模板等。当我们创建新应用程序或安装第三方应用程序时,我们应该将该应用程序添加到这个列表中。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Add your apps here
    'myapp',
]

MIDDLEWARE:此选项定义了许多在处理请求和响应中发挥重要作用的中间件类。您可以添加自己的中间件或更改此列表的顺序来更改中间件的执行顺序。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

DATABASES:此选项定义您的数据库配置。 Django 使用 ORM(对象关系映射)来处理数据库操作,您可以使用 Django 支持的任何数据库后端,例如 SQLite、PostgreSQL、MySQL 等。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

TEMPLATES:此选项定义 Django 的配置,包括模板。模板的位置、模板引擎等。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        ...
    },
]
  1. STATIC_URLSTATIC_ROOT:这两个设置用于配置静态文件的处理方式。 STATIC_URL定义静态文件的URL前缀,STATIC_ROOT定义静态文件的存储位置。
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

以上只是文件settings.py中的一些基本设置。其实这个文件里有几个配置项。您可以根据需要调整这些配置。了解settings.py文件的工作原理和用法是掌握Django的关键一步。

urls.py

在Django的Web框架中,文件urls.py是非常关键的部分。它负责URL路由的配置,确保用户请求的URL能够正确映射到相应的视图函数或类。在本文中,我们将深入探讨 urls.py 文件的结构和用法。

在新建的Django项目中,文件urls.py位于项目根目录下。该文件包含一个名为 urlpatterns 的列表。列表中的每个元素都是对函数 path()re_path() 的调用。该函数 Called 定义了 URL 模式和视图之间的映射。

这是一个简单的 urls.py 文件:

from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', views.hello_world),
]

在这个文件中,我们首先从 导入 path()。 模块 然后, 函数定义url 模式 的列表。该列表包含两种 URL 模式。第一个模式是 'admin/',它映射到 Django 自己的管理视图;第二个模式是 'hello/',它附加到我们自己定义的 hello_world 视图。函数

path()接受两个必需参数,第一个是URL模式字符串,第二个是显示函数或类。它还接受可选的第三个参数,这是一个字典,可用于将其他参数传递给视图。

除了函数path()之外,django.urls模块还提供函数

  • 定义 URL。模型。例如,以下代码定义匹配任意数字的 URL 模式:

    from django.urls import re_path
    from . import views
    
    urlpatterns = [
        re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    ]

    在此示例中,URL 模式字符串是正则表达式,(?P[0-9]{4} )表示匹配四位数字,并将其命名为年份。在视图函数year_archive中我们可以通过参数year得到这个值。文件

    urls.py是Django项目的重要组成部分。它将用户请求的URL映射到相应的视图来处理用户的请求。了解它的工作原理和用法可以帮助我们更好地使用Django框架构建Web应用程序。

    asgi.py

    ASGI,全称Asynchronous Server Gateway Interface,是一个用于构建异步Web应用程序的标准Python接口。从Django 3.0开始,Django开始支持ASGI,这使得我们可以在Django中使用异步编程来提高Web应用程序的性能。在Django项目中,asgi.py文件是ASGI配置文件,它定义了ASGI应用程序并配置中间件和路由。现在让我们深入了解一下文件 asgi.py 及其主要用途。

    首先我们看一下新创建的Django项目中的asgi.py文件:

    """
    ASGI config for myproject project.
    
    It exposes the ASGI callable as a module-level variable named ``application``.
    
    For more information on this file, see
    https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
    """
    
    import os
    
    from django.core.asgi import get_asgi_application
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
    
    application = get_asgi_application()

    在这个文件中,我们首先设置环境变量_DU_SETDJ_DUDS,这个变量告诉Django哪个它必须使用的设置文件。然后我们调用函数 get_asgi_application() 来检索 ASGI 应用程序并将其分配给变量 application。此 application 变量是 ASGI 服务器接口的入口点。 ASGI 服务器将使用此变量来启动我们的 Django 应用程序。

    这个基本的 asgi.py 文件足以在 ASGI 服务器(例如 Daphne 或 Uvicorn)上运行我们的 Django 应用程序。然而,ASGI 的真正威力在于其异步特性。我们可以通过添加异步中间件和路由来利用此功能。

    例如,我们可以添加异步中间件来处理 Websocket 连接:

    from channels.routing import ProtocolTypeRouter, URLRouter
    from channels.auth import AuthMiddlewareStack
    import myapp.routing
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
    
    application = ProtocolTypeRouter({
        "http": get_asgi_application(),
        "websocket": AuthMiddlewareStack(
            URLRouter(
                myapp.routing.websocket_urlpatterns
            )
        ),
    })

    在此示例中,我们创建一个可以路由协议类型的 ProtocolTypeRouter 实例。对于 HTTP 请求,我们使用原始的 Django 应用程序;对于 Websocket 请求,我们使用中间件堆栈和 URL 路由。 AuthMiddlewareStack是提供身份验证功能的中间件,URLRouter用于路由Websocket请求。

    通常,asgi.py文件是Django异步编程的入口点。它提供了配置 ASGI 应用程序的方法,包括添加中间件和路由。了解它的工作原理和用法可以帮助我们更好地使用Django中的异步编程,提高Web应用程序的性能。

    wsgi.py

    WSGI,Web 服务器网关接口,是 Python 应用程序和 Web 服务器之间的通用接口。在 Django 中,wsgi.py 文件是 WSGI 接口的配置文件,使 Web 服务器能够与 Django 应用程序进行交互。在本文中,我们将深入探讨文件wsgi.py的结构和用法。

    在新创建的 Django 项目中,文件wsgi.py位于项目的根文件夹中。主要包含两部分:设置环境变量DJANGO_SETTINGS_MODULE和定义WSGI应用程序。以下是 wsgi.py 文件的典型示例:

    """
    WSGI config for mysite project.
    
    It exposes the WSGI callable as a module-level variable named ``application``.
    
    For more information on this file, see
    https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
    """
    
    import os
    
    from django.core.wsgi import get_wsgi_application
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    
    application = get_wsgi_application()

    在此文件中,行 os.environ.setdefault('DJANGO_SETTINGS')_MODULE.setting, ' 环境变量 DJANGO_SETTINGS_MODULE 已设置,它告诉 Django 使用哪个 settings.py 文件。

    application = get_wsgi_application()这行代码定义了一个 WSGI 应用程序。函数get_wsgi_application()返回一个可以处理HTTP请求并生成HTTP响应的WSGI应用程序。这里,application是一个全局变量,它是 WSGI 服务器接口的入口点。

    然后您可以使用 WSGI 服务器来运行您的 Django 应用程序。通过使用 Gunicorn,您可以在命令行中输入以下命令:

    gunicorn mysite.wsgi

    此命令将启动 Gunicorn 服务器并将 application 变量加载到 mysite 模块中。作为 WSGI 应用程序。

    通常,wsgi.py文件是重要的Django配置文件,它定义了Django应用程序和WSGI服务器之间的接口。通过了解这个文件的工作原理,我们可以更好地理解Django应用程序如何运行以及如何部署Django应用程序。

  • 版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门