在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.py
和myproject/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 Shell:manage.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 *
只有module1
和module2
会被导入,其余的模块则不会。
总的来说,__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,
...
},
]
- STATIC_URL 和 STATIC_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产品业务负责人。
发表回复