Django容易被遗忘却无比重要的框架默认文件介绍及使用方法
ccwgpt 2024-09-17 12:42 36 浏览 0 评论
在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})/#39;, 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应用。
相关推荐
- 2025南通中考作文解读之四:结构框架
-
文题《继续走,迈向远方》结构框架:清晰叙事,层层递进示例结构:1.开头(点题):用环境描写或比喻引出“走”与“远方”,如“人生如一条长路,每一次驻足后,都需要继续走,才能看见更美的风景”。2.中间...
- 高中数学的知识框架(高中数学知识框架图第三章)
-
高中数学的知识框架可以划分为多个核心板块,每个板块包含具体的知识点与内容,以下为详细的知识框架结构:基础知识1.集合与逻辑用语:涵盖集合的概念、表示方式、性质、运算,以及命题、四种命题关系、充分条件...
- 决定人生的六大框架(决定人生的要素)
-
45岁的自己混到今天,其实是失败的,要是早点意识到影响人生的六大框架,也不至于今天的模样啊!排第一的是环境,不是有句话叫人是环境的产物,身边的环境包括身边的人和事,这些都会对一个人产生深远的影响。其次...
- 2023年想考过一级造价师土建计量,看这30个知识点(三)
-
第二章工程构造考点一:工业建筑分类[考频分析]★★★1.按厂房层数分:(1)单层厂房;(2)多层厂房;(3)混合层数厂房。2.按工业建筑用途分:(1)生产厂房;(2)生产辅助厂房;(3)动力用厂房;(...
- 一级建造师习题集-建筑工程实务(第一章-第二节-2)
-
建筑工程管理与实务题库(章节练习)第一章建筑工程技术第二节结构设计与构造二、结构设计1.常见建筑结构体系中,适用建筑高度最小的是()。A.框架结构体系B.剪力墙结构体系C.框架-剪力墙结构体系D...
- 冷眼读书丨多塔斜拉桥,这么美又这么牛
-
”重大交通基础设施的建设是国民经济和社会发展的先导,是交通运输行业新技术集中应用与创新的综合体现。多塔斜拉桥因跨越能力强、地形适应性强、造型优美等特点,备受桥梁设计者的青睐,在未来跨越海峡工程中将得...
- 2021一级造价师土建计量知识点:民用建筑分类
-
2021造价考试备考开始了,学霸君为大家整理了一级造价师备考所用的知识点,希望对大家的备考道路上有所帮助。 民用建筑分类 一、按层数和高度分 1.住宅建筑按层数分类:1~3层为低层住宅,4~6层...
- 6个建筑结构常见类型,你都知道吗?
-
建筑结构是建筑物中支承荷载(作用)起骨架作用的体系。结构是由构件组成的。构件有拉(压)杆、梁、板、柱、拱、壳、薄膜、索、基础等。常见的建筑结构类型有6种:砖混结构、砖木结构、框架结构、钢筋混凝土结构、...
- 框架结构设计经验总结(框架结构设计应注意哪些问题)
-
1.结构设计说明主要是设计依据,抗震等级,人防等级,地基情况及承载力,防潮抗渗做法,活荷载值,材料等级,施工中的注意事项,选用详图,通用详图或节点,以及在施工图中未画出而通过说明来表达的信息。2.各...
- 浅谈混凝土框架结构设计(混凝土框架结构设计主要内容)
-
浅谈混凝土框架结构设计 摘要:结构设计是个系统的全面的工作,需要扎实的理论知识功底,灵活创新的思维和严肃认真负责的工作态度。钢筋混凝土框架结构虽然相对简单,但设计中仍有很多需要注意的问题。本文针...
- 2022一级建造师《建筑实务》1A412020 结构设计 精细考点整理
-
历年真题分布统计1A412021常用建筑结构体系和应用一、混合结构体系【2012-3】指楼盖和屋盖采用钢筋混凝土或钢木结构,而墙和柱采用砌体结构建造的房屋,大多用在住宅、办公楼、教学楼建筑中。优点:...
- 破土动工!这个故宫“分院”科技含量有点儿高
-
故宫“分院”设计图。受访者供图近日,位于北京海淀区西北旺镇的故宫北院区项目已开始破土动工,该项目也被称作故宫“分院”,筹备近十年之久。据悉,故宫本院每年展览文物的数量不到1万件,但是“分院”建成后,预...
- 装配式结构体系介绍(上)(装配式结构如何设计)
-
PC构件深化、构件之间连接节点做法等与相应装配式结构体系密切相关。本节列举目前常见的几种装配式结构体系:装配整体式混凝土剪力墙结构体系、装配整体式混凝土框架结构体系、装配整体式混凝土空腔结构体系(S...
- 这些不是双向抗侧结构体系(这些不是双向抗侧结构体系的特点)
-
双向抗侧土木吧规范对双向抗恻力结构有何规定?为何不应采用单向有墙的结构?双向抗侧土木吧1.规范对双向抗侧力结构体系的要求抗侧力体系是指抵抗水平地震作用及风荷载的结构体系。对于结构体系的布置,规范针对...
- 2022一级建造师《建筑实务》1A412020 结构设计 精细化考点整理
-
1A412021常用建筑结构体系和应用一、混合结构体系【2012-3】指楼盖和屋盖采用钢筋混凝土或钢木结构,而墙和柱采用砌体结构建造的房屋,大多用在住宅、办公楼、教学楼建筑中。优点:抗压强度高,造价...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)