乐趣区

关于python:Django容易被遗忘却无比重要的框架默认文件介绍及使用方法

在 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.py 文件中,Django 的设置模块被定义为环境变量 DJANGO_SETTINGS_MODULE,默认值为 ’myproject.settings’。接着,它尝试从django.core.management 中导入execute_from_command_line,这个函数是用来执行命令行治理工作的。

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

运行开发服务器 :在本地开发时,咱们常常须要运行 Django 自带的开发服务器。你能够应用runserver 命令来做到这一点:

python manage.py runserver

这将启动开发服务器,默认在127.0.0.1:8000。你能够在浏览器拜访这个地址来查看你的网站。

数据库迁徙 :Django 有一个十分弱小的数据库形象 API,它能够解决很多数据库相干的工作。例如,当咱们更改了模型(models)后,咱们须要将这些更改利用到数据库,这就须要进行数据库迁徙。以下是如何应用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 将文件夹辨认为一个包(package)。这个概念在 Python 的模块化编程中尤为重要,它使得咱们能够将代码组织得更加结构化,并提供了更好的名称空间治理。当初,让咱们深刻摸索一下 __init__.py 的作用和用法。

首先,咱们来看一下最简略的 __init__.py 文件,即一个空文件。在一个 Python 我的项目中,你可能会看到很多这样的文件。它们位于包的目录下,并且名为__init__.py

# mypackage/__init__.py

这个空文件的存在意味着 Python 解释器将把它所在的目录视为包(package),而这个包能够蕴含其余的模块(module)或者子包(subpackage)。例如,如果咱们有以下的我的项目构造:

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()函数的调用,这个函数调用定义了一个 URL 模式和一个视图的映射关系。

以下是一个简略的 urls.py 文件:

from django.urls import path
from . import views

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

在这个文件中,咱们首先从 django.urls 模块导入了 path() 函数,而后定义了 urlpatterns 列表。这个列表蕴含了两个 URL 模式,第一个模式是 'admin/',它被映射到了 Django 的自带的 admin 视图;第二个模式是'hello/',它被映射到了咱们本人定义的hello_world 视图。

path()函数承受两个必选参数,第一个是 URL 模式字符串,第二个是视图函数或类。它还能够承受一个可选的第三个参数,这个参数是一个字典,能够用来为视图传递额定的参数。

除了 path() 函数,django.urls模块还提供了 re_path() 函数,这个函数容许咱们应用正则表达式来定义 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<year>[0-9]{4})示意匹配四位数字,并将其命名为 year。在视图函数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()

在这个文件中,咱们首先设置了环境变量 DJANGO_SETTINGS_MODULE,这个变量通知 Django 应该应用哪个设置文件。而后,咱们调用get_asgi_application() 函数来获取一个 ASGI 利用,并将其赋值给 application 变量。这个 application 变量是 ASGI 服务器接口的入口点,ASGI 服务器将应用这个变量来启动咱们的 Django 利用。

这个根本的 asgi.py 文件曾经足够让咱们的 Django 利用运行在一个 ASGI 服务器上了,比方 Daphne 或 Uvicorn。然而,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 Server Gateway Interface,是 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', 'mysite.settings')这行代码设置了环境变量DJANGO_SETTINGS_MODULE,这通知 Django 应该应用哪个 settings.py 文件。

application = get_wsgi_application() 这行代码定义了一个 WSGI 利用。get_wsgi_application()函数返回一个 WSGI 利用,这个利用能够解决 HTTP 申请并生成 HTTP 响应。在这里,application是一个全局变量,它是 WSGI 服务器接口的入口点。

而后,你能够应用一个 WSGI 服务器来运行你的 Django 利用。例如,应用 Gunicorn,你能够在命令行中输出以下命令:

gunicorn mysite.wsgi

这个命令会启动一个 Gunicorn 服务器,并加载 mysite.wsgi 模块中的 application 变量作为 WSGI 利用。

总的来说,wsgi.py文件是一个重要的 Django 配置文件,它定义了 Django 利用与 WSGI 服务器的接口。通过了解这个文件的工作原理,咱们能够更好地了解 Django 利用是如何运行的,以及如何部署 Django 利用。

如有帮忙,请多关注
集体微信公众号:【Python 全视角】
TeahLead_KrisChang,10+ 年的互联网和人工智能从业教训,10 年 + 技术和业务团队治理教训,同济软件工程本科,复旦工程治理硕士,阿里云认证云服务资深架构师,上亿营收 AI 产品业务负责人。

退出移动版