在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产品业务负责人。

Django容易被遗忘却无比重要的框架默认文件介绍及使用方法的更多相关文章

  1. Django框架-目录文件简介

    Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...

  2. Django中简单添加HTML、css、js等文件(非正规添加,适合小白)

    Django中简单添加HTML.css.js等文件 首先申明下自己的环境, python版本3.65(亲测3.7版本有毒,没解决掉!) Django版本1.11.15(版本比较成熟,也可以用最新的版本 ...

  3. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  4. 第三百一十九节,Django框架,文件上传

    第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...

  5. Django里面是文件静态化的方法

    看Django官网的时候,由于自己的英语基础较差,而实现的谷歌翻译比较烂,只能看懂个大概.在文件静态化的时候,讲的比较繁琐一点,没怎么看懂,遂询问了一下其他人,明白了许多,但是细节需要注意的地方特别多 ...

  6. django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件

    一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...

  7. Django框架学习-01Django介绍

    01-Django介绍 02-HTTP协议介绍 01-Django介绍 1.什么是Web框架? 随着Web最新发展趋势的不断升级,Web项目开发也越来越难,而且需要花费更多的开发时间.所以,Web程序 ...

  8. Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag

    Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...

  9. 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...

  10. Django上手体验,对比Asp.Net Core框架

    一.前言 最近经常听说“人生苦短,我选python”这句话,处于好奇,笔者对python相关技术和web框架做了一番研究,本篇就对python web框架代表作Django和微软主打web框架Asp. ...

随机推荐

  1. 【Spring5】数据库事务操作

    Spring针对事务的操作 事务的概念:事务是数据库最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则都失败. 事务的特性:ACID 原子性.一致性.隔离性.持久性 JavaEE环境三层 ...

  2. 机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类

    实验2 感知机算法与支持向量机算法 一.预备知识 1.感知机算法 二.实验目的 掌握感知机算法的原理及设计: 掌握利用感知机算法解决分类问题. 三.实验内容 设计感知机算法求解, 设计SVM算法求解( ...

  3. [Pytorch框架] 2.1.3 神经网络包nn和优化器optm

    文章目录 PyTorch 基础 : 神经网络包nn和优化器optm 定义一个网络 损失函数 优化器 PyTorch 基础 : 神经网络包nn和优化器optm torch.nn是专门为神经网络设计的模块 ...

  4. Jenkins-Email Extension Plugin邮件配置

    前言:此文为 Jenkins 2.346 版本 一.配置准备 1.安装 Email Extension Plugin 插件 二.配置邮件 Email Extension Plugin 部分 1.进入系 ...

  5. flink之Sink to MySQL和Redis

    前言 下面这篇文章是使用Flink的Sink 写出数据到Redis和MySQL Flink之Sink写入Redis和MySQL Flink需要添加Sink的时候,需要自己去添加写Sink,我们可以实现 ...

  6. 使用 shell 脚本自动申请进京证 (六环外) —— debug 过程

    问题现象 用 shell 脚本写了一个自动办理六环外进京证的工具 <使用 shell 脚本自动申请进京证 (六环外)>,然而运行这个脚本总是返回以下错误信息: { "msg&qu ...

  7. SQL语句获取数据表结构定义,适合导出EXCEL为文档

    SELECT 表名 = Case When A.colorder=1 Then D.name Else '' End, 表说明 = Case When A.colorder=1 Then isnull ...

  8. stl------stack与queue

    stack与queue 一.stack 二.queue 例题:详见我的另一篇博文: 栈------表达式求值 http://www.cnblogs.com/Cloud-king/p/8453703.h ...

  9. 2021-10-23:位1的个数。编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1‘ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中

    2021-10-23:位1的个数.编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量).提示:请注意,在某些语言(如 Java)中 ...

  10. 2021-09-09:企鹅厂活动发文化衫,文化衫有很多种,企鹅们都穿文化衫。采访中,企鹅会说还有多少企鹅跟他穿一种文化衫。有些企鹅没被采访到,将这些回答放在answers数组里,返回活动中企鹅的最少数

    2021-09-09:企鹅厂活动发文化衫,文化衫有很多种,企鹅们都穿文化衫.采访中,企鹅会说还有多少企鹅跟他穿一种文化衫.有些企鹅没被采访到,将这些回答放在answers数组里,返回活动中企鹅的最少数 ...