Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构

目录

  • 一、Python Web框架要点
  • 二、Django流程
    • 2.1 Django介绍
      • 2.1.1 简介
      • 2.1.2 特点
      • 2.1.3 MVT模式
      • 2.1.4 Django新特性
      • 2.1.5 Django学习资料
    • 2.2 搭建Django框架开发环境
      • 2.2.1 安装Python语言环境
      • 2.2.2 安装Django框架
    • 2.3 创建Django项目
    • 2.4 Pycharm创建项目
    • 2.5 初试Django5
      • 2.5.1 Django的操作指令
      • 2.5.2 开启helloDjango5之旅
    • 2.6 调试Django项目
      • 2.6.1 PyCharm断点调试
      • 2.6.2 调试异常
    • 2.7 Django与WSGI(拓展)

一、Python Web框架要点

Web 应用程序处理流程:

Web 程序框架的意义: 用于搭建 Web 应用程序,免去不同 Web 应用相同代码部分的重复编写,只需关心 Web 应用核心的业务逻辑实现。

Web 应用程序的本质: 接收并解析 HTTP 请求,获取具体的请求信息,处理本次 HTTP 请求,即完成本次请求的业务逻辑处理。构造并返回处理结果——HTTP 响应。

Web 框架学习方法:

  1. 如何搭建工程程序
    • 工程的组建
    • 工程的配置
    • 路由定义
    • 视图函数定义
  2. 如何获取请求数据(操作 request 对象)
  3. 如何构造响应数据(构造 response 对象)
  4. 框架提供的其他功能组件的使用:数据库、模板、admin
  5. 扩展了解如何搭建生产环境的 Django 服务

注意: 光学会 Django 框架是不够的,我们还需要学会它的生态圈,才能让我们在工作中屹立不倒。

二、Django流程

重点:

  1. MVT 流程,掌握 M/V/T 的每个模块的功能,了解 M/V/T 的流程

  2. 创建 Django 项目和应用

  3. 视图和 URL

  4. Django 项目的配置

2.1 Django介绍

在这里插入图片描述

2.1.1 简介

Django,发音为 [`dʒæŋɡəʊ],是用 python 语言写的开源 web 开发框架,并遵循 MVC 设计。劳伦斯出版集团为了开发以新闻内容为主的网站,即 CMS(内容管理系统) 软件,而开发出来了这个框架,于 2005 年 7 月 在 BSD 许可证下发布。这个名称来源于比利时的爵士音乐家 Django Reinhardt,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。

由于 Django 在近年来的迅速发展,应用越来越广泛,被著名 IT 开发杂志 SDTimes 评选为 2013SDTimes100,位列 "API、库和框架" 分类第6位,被认为是该领域的佼佼者。
在这里插入图片描述
Django 的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以 "插件" 形式服务于整个框架,Django 有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得 Django 具有很强的可扩展性。它还强调快速开发和 DRY(DoNotRepeatYourself) 原则。近年来,得益于 Python 编程语言地位的不断上升,Django 框架的发展势头非常迅猛,版本的更新迭代速度也非常快。由 Django 官方网站提供的、最新的产品发布路线图(Release-Roadmap),如下图所示:

2.1.2 特点

Django 基于 MTV 的设计十分优美,其具有以下特点:

  1. 对象关系映射(Object Relational Mapping,ORM):通过定义映射类来构建数据模型,将模型与关系数据库连接起来,使用 ORM 框架内置的数据库接口可实现复杂的数据操作。
  2. URL 设计:开发者可以设计任意的 URL(网站地址),而且还支持使用正则表达式设计。
  3. 模板系统:提供可扩展的模板语言,模板之间具有可继承性。
  4. 表单处理:可以生成各种表单模型,而且表单具有有效性检验功能。
  5. Cache 系统:完善的缓存系统,可支持多种缓存方式。
  6. Auth 认证系统:提供用户认证、权限设置和用户组功能,功能扩展性强。
  7. 国际化:内置国际化系统,方便开发出多种语言的网站。
  8. Admin 后台系统:内置 Admin 后台管理系统,系统扩展性强。

2.1.3 MVT模式

有一种程序设计模式叫 MVC,其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。

MVC 的全拼为 Model-View-Controller,最早由 TrygveReenskaug 在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言 Smalltalk 发明的一种软件设计模式,是为了将传统的输入(input)、处理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的。随着标准输入输出设备的出现,开发人员只需要将精力集中在业务逻辑的分析与实现上。后来被推荐为 Oracle 旗下 Sun 公司 Java EE 平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。现在虽然不再使用原来的分工方式,但是这种分工的思想被沿用下来,广泛应用于软件工程中,是一种典型并且应用广泛的软件架构模式。后来,MVC 的思想被应用在了 Web 开发方面,被称为 Web MVC 框架。

MVC 模式说明:

M 全拼为 Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。V 全拼为 View,用于封装结果,生成页面展示的 html 内容。C 全拼为 Controller,用于接收请求,处理业务逻辑,与 Model 和 View 交互,返回结果。

Django 的 MVT:

M 全拼为 Model,与 MVC 中的 M 功能相同,负责和数据库交互,进行数据处理。V 全拼为 View,与 MVC 中的 C 功能相同,接收请求,进行业务处理,返回应答。T 全拼为 Template,与 MVC 中的 V 功能相同,负责封装构造要返回的 html。注: 差异就在于黑线黑箭头标识出来的部分

2.1.4 Django新特性

Django 2.0的新特性: 2017年12月2日,Django 官方发布了 2.0 版本,成为多年来第一次大版本提升。其中最主要的特性是 Django 2.0 支持 Python 3.4、3.5 和 3.6,不再支持 Python 2,而 Django 1.11 是支持 Python 2.7 的最后版本。此外,新版本还有以下显著的新特性:

  1. 简化 URL 路由语法:使得 Django.urls.path() 方法的语法更简单。功能的导入由模块 Django.urls 实现,如 from Django.urls import include, path, re_path。
  2. admin 管理系统:支持主流的移动设备并新增属性。ModelAdmin.autocomplete_fields 和方法 ModelAdmin.get_autocomplete_fields()。
  3. 用户认证:PBKDF2 密码哈希默认的迭代次数从 36000 增加到 100000。
  4. Cache(缓存):cache.set_many() 现在返回一个列表,包含了插入失败的键值。
  5. 通用视图:ContextMixin.extra_context 属性允许在 View.as_view() 中添加上下文。
  6. Pagination(分页):增加 Paginator.get_page(),可以处理各种非法页面参数,防止异常。
  7. Templates(模板):提高 Engine.get_default() 在第三方模块的用途。
  8. Validators(验证器):不允许 CharField 及其子类的表单输入为空。
  9. File Storage(文件存储):File.open() 可以用于上下文管理器,例如 with file.open() as f。
  10. 连接 MySQL 不再使用 mysqldb 模块,改用为 mysqlclient,两者之间并没有太大的使用差异。
  11. Management Commands(管理命令):inspectdb 将 MySQL 的无符号整数视作 PositiveIntegerField 或者 PositiveSmallIntegerField 字段类型。

Django 3.0的新特性: Django 对 Python 版本的支持一向是很积极的,Django 3.0 只支持 Python3.6 以上的版本,即 Python3.6、3.7 和 3.8 等,Django 2.2.X 系列成为最后一个支持 Python3.5 的系列。此外,新版本还有以下显著的新特性:

  1. 数据库支持。Django3.0 在数据库支持方面的最大亮点是正式支持了 MariaDB 10.1 及更高版本。对于开发者来说,又多了一种数据库选择,并且 MariaDB 与 MYSOL 类似,并且存储引擎类型更多,查询效率更快。

  2. ASGI 支持。ASGI 支持可以说是开发者最期待的 Django3.0 的新功能。ASGI 是异步网关协议接口,是介于网络协议服务和 Python 应用之间的标准接口,能够处理多种通用的协议类型,包括 HTTP、HTTP2 和 WebSocket。Django 3.0 对 ASGI 模式的支持使得 Diango 可以作为原生异步应用程序运维,原有的 WSGI 模式将围绕每个 Django 调用运行单个事件循环,使异步处理层与同步服务器兼容。在这个改造的过程中,每个特性都会经历以下三个实现阶段:

    • 多 Sync-only,只支持同步,也就是当前的情况
    • Sync-native,原生同步,同时带有异步封装器
    • Async-native,原生异步,同时带有同步封装器
  3. 模型字段选择的枚举。Django 3.0 可以自定义枚举类型 TextChoices、IntegerChoices 和 Choices 来定义 Field.choices。其中 TextChoices 和 IntegerChoices 类型用于文本和整数字段,Choices 类型允许定义其他具体数据类型的兼容枚举。

Django 4.0的新特性: 看文档把:https://docs.djangoproject.com/zh-hans/5.1/releases/4.0/
Django 5.0的新特性: 看文档把:https://docs.djangoproject.com/zh-hans/5.0/releases/5.0/

2.1.5 Django学习资料

官方网站(强力推荐): https://www.djangoproject.com/、https://docs.djangoproject.com/zh-hans/5.1/intro/overview/、https://docs.djangoproject.com/en/5.1/
Github 源码: https://github.com/django/django
Django Book 教程: https://djangobook.com/
Tange With Django 教程:https://www.tangowithdjango.com/book17/
1.11版中文文档: https://yiyibooks.cn/xx/Django_1.11.6/index.html

2.2 搭建Django框架开发环境

2.2.1 安装Python语言环境

参考文章:https://blog.csdn.net/xw1680/article/details/136754547

2.2.2 安装Django框架

使用 Anaconda 创建虚拟环境,参考文章:https://blog.csdn.net/xw1680/article/details/133908625

(base) C:\Users\amoxiang>conda create -n django5_study python=3.12
(base) C:\Users\amoxiang>conda activate django5_study

使用 pip工具安装 Django:(django5_study) C:\Users\amoxiang>pip install django,如下图所示:

使用 "pip list" 命令查询 Python 第三方插件列表,具体如下所示:

(django5_study) C:\Users\amoxiang>pip list
Package    Version
---------- -------
asgiref    3.8.1
Django     5.1.3
pip        24.2
setuptools 75.1.0
sqlparse   0.5.1
tzdata     2024.2
wheel      0.44.0

通过 Python 代码调用 Django 框架内置的函数 get_version() 来查询其版本,操作如下所示:
在这里插入图片描述

2.3 创建Django项目

一个项目可以理解为一个网站,创建 Django 项目可以在命令提示符窗口输入创建指令完成。打开命令提示符窗口,将当前路径切换到 D盘 并输入项目创建指令:

(base) C:\Users\amoxiang>conda activate django5_study(django5_study) C:\Users\amoxiang>d:(django5_study) D:\>cd Code\dream\PythonStudy
# django-admin startproject 项目名称
(django5_study) D:\Code\dream\PythonStudy>django-admin startproject Django5Study

项目创建后,可以在 D:\Code\dream\PythonStudy 下看到新创建的文件夹 Django5Study,在 PyCharm 下查看该项目的结构,如下图所示:
在这里插入图片描述
Django5Study 项目里包含 Django5Study 文件夹和 manage.py 文件,而 Django5Study 文件夹又包含5个 .py 文件。项目的各个文件说明如下:

  1. manage.py:命令行工具,内置多种方式与项目进行交互。在命令提示符窗口下,将路径切换到 Django5Study 项目并输入 python manage.py help,可以查看该工具的指令信息。
  2. __init__.py 初始化文件,一般情况下无须修改。
  3. asgi.py:开启一个 ASGI 服务,ASGI 是异步网关协议接口。
  4. settings.py:项目的配置文件,项目的所有功能都需要在该文件中进行配置,配置说明会在文章后半部分详细讲述。
  5. urls.py:项目的路由设置,设置网站的具体网址内容。
  6. wsgi.py:全称为 Python Web Server Gateway Interface,即 Python 服务器网关接口,是 Python 应用与 Web 服务器之间的接口,用于 Django 项目在服务器上的部署和上线,一般不需要修改。

在 Web 应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该模块代码整体复制过去,达到复用。在 Flask 框架中也有类似子功能应用模块的概念,即蓝图 Blueprint。Django 的视图编写是放在子应用中的。在 Django 中,创建子应用模块目录仍然可以通过命令来操作,即:

(django5_study) D:\Code\dream\PythonStudy>cd Django5Study
# 创建子应用命令: python manage.py startapp 子应用名称
(django5_study) D:\Code\dream\PythonStudy\Django5Study>python manage.py startapp chapter01_HelloDjango5

再次查看项目 Django5Study 的目录结构,如下图所示:
在这里插入图片描述
从图上图中可以看到,项目新建了 chapter01_HelloDjango5 文件夹。在 chapter01_HelloDjango5 文件夹可以看到有多个 .py 文件和 migrations 文件夹,说明如下:

  1. migrations:用于生成数据迁移文件,通过数据迁移文件可自动在数据库里生成相应的数据表。
  2. __init__.py chapter01_HelloDjango5 文件夹的初始化文件。
  3. admin.py:用于设置当前 App 的后台管理功能。
  4. apps.py:当前 App 的配置信息,在 Django 1.9 版本后自动生成,一般情况下无须修改。
  5. models.py:定义数据库的映射类,每个类可以关联一张数据表,实现数据持久化,即 MTV里面的模型(Model)。
  6. tests.py:自动化测试的模块,用于实现单元测试。
  7. views.py:视图文件,处理功能的业务逻辑,即 MTV 里面的视图(Views)。

完成项目和 chapter01_HelloDjango5 的创建后,最后在命令提示符窗口输入以下指令启动项目:
在这里插入图片描述
输入运行指令 python manage.py runserver 8002,如上图所示。其中 8002 是端口号,如果在指令里没有设置端口,端口就默认为 8000。最后在浏览器上输入 http://127.0.0.1:8002/,可看到项目的运行情况,如下图所示:
在这里插入图片描述

2.4 Pycharm创建项目

除了在命令提示符窗口创建 Django 项目之外,还可以在 PyCharm 中创建 Django 项目。PyCharm 必须为专业版才能创建与调试 Django 项目,社区版是不支持此功能的。打开 PyCharm 并在左上方单击 File→New Project,创建新项目,如下图所示:

项目创建后,可以看到目录结构多出了 templates 文件夹,该文件夹用于存放 HTML 模板文件,如下图所示:
在这里插入图片描述
接着创建子应用,可以在 PyCharm 的 Terminal 中输入创建指令,创建指令与命令提示符窗口中输入的指令是相同的,如下图所示:
在这里插入图片描述
完成项目和 pycharmCreateDjangoTest 子应用的创建后,启动项目。如果项目是由 PyCharm 创建的,就直接单击 "运行" 按钮启动项目即可,如下图所示:
在这里插入图片描述
如果项目是在命令提示符窗口创建的,想要在 PyCharm 启动项目,而 PyCharm 没有运行脚本,就需要对该项目创建运行脚本,如下图所示:
在这里插入图片描述
单击上图中的 Edit Configurations 就会出现 Run/Debug Configurations 界面,单击该界面左上方的 + 并选择 Django server,输入脚本名字,单击 OK 按钮即可创建运行脚本,如下图所示:

2.5 初试Django5

要学习 Django 首先需要了解 Django 的操作指令,了解了每个指令的作用,才能在 Django5Study 项目里编写 Hello World 网页,然后通过该网页我们可以简单了解 Django 的开发过程。

2.5.1 Django的操作指令

官方文档:https://docs.djangoproject.com/zh-hans/5.1/ref/django-admin/

无论是创建项目还是创建项目应用,都需要使用相关的指令才能得以实现,这些指令都是 Django 内置的操作指令。在 PyCharm 的 Terminal 中输入指令 python manage.py help 并按回车键,即可看到相关的指令信息,如下所示:

PS D:\Code\dream\PythonStudy\Django5Study> python manage.py helpType 'manage.py help <subcommand>' for help on a specific subcommand.Available subcommands:[auth]changepasswordcreatesuperuser[contenttypes]remove_stale_contenttypes[django]checkcompilemessagescreatecachetabledbshelldiffsettingsdumpdataflushinspectdbloaddatamakemessagesmakemigrationsmigrateoptimizemigrationsendtestemailshellshowmigrationssqlflushsqlmigratesqlsequenceresetsquashmigrationsstartappstartprojecttesttestserver[sessions]clearsessions[staticfiles]collectstaticfindstaticrunserver

Django 的操作指令共有 30 余条,每条指令的说明如下表所示:

上表简单讲述了 Django 操作指令的作用,对于刚接触 Django 的读者来说,可能并不理解每个指令的具体作用,本小节只对这些指令进行概述,读者只需要大概了解,在后续的学习中会具体讲述这些指令的使用方法。

2.5.2 开启helloDjango5之旅

我们现在对 Django 已经有了大概的认知,在本小节,我们在 Django5Study 项目里实现 helloDjango5 网页,让我们打开 Django 的大门。首先在 templates 文件夹里新建 helloDjango5.html 文件,该文件是 Django 的模板文件,我们的 Django5Study 项目是在命令提示符窗口下创建的,需要在 Django5Study 项目的路径下自行创建 templates 文件夹,如下图所示:
在这里插入图片描述
接着打开 Django5Study 文件夹中的配置文件 settings.py,找到配置属性 INSTALLED_APPS 和 TEMPLATES,分别将项目应用 chapter01_HelloDjango5 和模板文件夹 templates 添加到相应的配置属性,其配置如下所示:

INSTALLED_APPS = ["django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.contrib.sessions","django.contrib.messages","django.contrib.staticfiles",# TODO 1.添加(注册)子应用 chapter01_HelloDjango5'chapter01_HelloDjango5',
]TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates",# TODO 2.配置模板文件夹的路径"DIRS": [BASE_DIR / 'templates',],"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.debug","django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},
]

Django 所有的功能都必须在配置文件 settings.py 中设置,否则项目在运行的时候无法生成相应的功能,有关配置文件 settings.py 的配置属性将会在后面的文章进行详细讲述。编写 html 文件,在 templates 文件夹中新建 helloDjango5.html 文件,并且输入以下内容:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>helloDjango5~</h1>
</body>
</html>

然后在子应用的 views.py 文件中,即 D:\Code\dream\PythonStudy\Django5Study\chapter01_HelloDjango5\views.py,编写视图函数,内容如下:

from django.shortcuts import renderdef hello_django5(request):return render(request, 'helloDjango5.html')

D:\Code\dream\PythonStudy\Django5Study\Django5Study 目录中的 urls.py 设置路由,内容如下:

from django.contrib import admin
from django.urls import path
# ① 导入子应用中的视图函数
from chapter01_HelloDjango5.views import hello_django5urlpatterns = [path("admin/", admin.site.urls),path("", hello_django5),  # ② 设置路由匹配对应的视图函数
]

在上述代码里可以简单映射出用户访问网页的过程,说明如下:

  1. 当用户在浏览器访问网址的时候,该网址在项目所设置的路由(urls.py文件)里找到相应的路由信息。
  2. 然后从路由信息里找到对应的视图函数(views.py文件),由视图函数处理用户请求。
  3. 视图函数将处理结果传递到模板文件(index.html文件),由模板文件生成网页内容,并在浏览器里展现。

启动 Django5Study 项目,并在浏览器上访问路由地址 http://127.0.0.1:8000,即可看到 helloDjango5 网页,如下图所示:
在这里插入图片描述
由于 Django 默认配置的数据库是 sqlite,因此在启动 Django5Study 项目之后,在 Django5Study 的目录里自动新建 db.sqlite3 文件,如下图所示:
在这里插入图片描述

2.6 调试Django项目

在开发网站的过程中,为了确保功能可以正常运行及验证是否实现开发需求,开发人员需要对已实现的功能进行调试。Django 的调试方式分为 PyCharm 断点调试和调试异常。

2.6.1 PyCharm断点调试

我们知道,PyCharm 调试 Django 开发的项目,PyCharm 的版本必须为专业版,而社区版是不具备 Web 开发功能的。使用 PyCharm 启动 Django 的时候,可以发现 PyCharm 上带有爬虫的按钮,该按钮用于开启 Django 的 Debug 调试模式,如下图所示:
在这里插入图片描述
单击上图中的调试按钮(带有爬虫的按钮),即可开启调试模式,在 PyCharm 的正下方可以看到相关的调试信息,如下图所示:

我们通过简单的示例来讲述如何使用 PyCharm 的调试模式。以 Django5Study 项目为例,在 chapter01_HelloDjango5 文件夹的 views.py 文件里,视图函数 hello_django5 添加变量 value 并且在返回值 return 处设置断点,如下图所示:
在这里插入图片描述
设置断点是在要调试的代码左侧单击一下,出现红色的圆点,该圆点代表断点设置,当项目开启调试模式并运行到断点所在的代码位置,程序就会暂停运行。开启 Django5Study 项目的调试模式并在浏览器上访问 127.0.0.1:8000,在 PyCharm 正下方的调试界面里可以看到相关的代码信息,如下图所示:
在这里插入图片描述
调试界面 Debugger 的 Frames 是当前断点的程序所依赖的程序文件,单击某个文件,Variables 就会显示当前文件的程序所生成的对象信息。
单击 在这里插入图片描述
按钮,PyCharm 就会自动往下执行程序,直到下一个断点才暂停程序;单击 在这里插入图片描述
按钮,PyCharm 只会执行当前暂停位置的下一步代码,这样可以清晰地看到每行代码的执行情况。这两个按钮是断点调试最为常用的,它们能让开发者清晰地了解代码的执行情况和运行逻辑。如果程序在运行过程中出现异常或者代码中设有输出功能(如 print),这些信息就可以在 PyCharm 正下方调试界面的 Console 里查看,如下图所示:
在这里插入图片描述
启动项目的时候,从上图的运行信息看到 "System check identified no issues (0 silenced)." 信息,该信息表示 Django 对项目里所有的代码语法进行检测,如果代码语法存在错误,在启动的过程中就会报出相关的异常信息。

下图中的 "This is test!" 是视图函数 hello_django5 的 "print(value)" 代码输出结果;"GET / HTTP/1.1" 200 代表浏览器成功访问 127.0.0.1:8000,其中 200 代表 HTTP 的状态码。
在这里插入图片描述
注意: 断点调试无法在模板文件(templates 的 helloDjango5.html)设置断点,因此无法对模板文件进行调试,只能通过 PyChram 调试界面 Console 或浏览器开发者工具进行调试。

2.6.2 调试异常

PyCharm 的调试模式无法调试模板文件,而模板文件需要使用 Django 的模板语法,若想调试模板文件,则最有效的方法是查看 PyCharm 或浏览器提示的异常信息。调试异常需要根据项目运行时所产生的异常信息进行分析,使用浏览器访问路由地址的时候,如果出现异常信息,就可以直接查看异常信息找出错误位置。比如在 templates 的模板文件 helloDjango5.html 里添加错误的代码,如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Hello World</title>
</head>
<body>{# 添加错误代码static#}{% static %}<span>Hello World!!</span>
</body>
</html>

当运行 Django5Study 项目并在浏览器访问 127.0.0.1:8000 的时候,PyCharm 正下方的调试界面 Console 就会出现异常信息,从异常信息中可以找到具体的异常位置,如下图所示:
在这里插入图片描述
除了在 PyCharm 正下方的调试界面 Console 查看异常信息外,还可以在浏览器上分析异常信息,比如模板文件 helloDjango5.html 的错误语法,Django 还能标记出错位置,便于开发者调试和跟踪,如下图所示:

还有一种常见的情况是网页能正常显示,但网页内容出现部分缺失。对于这种情况,只能使用浏览器的开发者工具对网页进行分析处理。以 templates 的模板文件 helloDjango5.html 为例,对其添加正确的代码,但在网页里出现内容缺失,如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Hello World</title>
</head>
<body>
{# 添加正确代码,但不出现在网页 #}
<div>Hi,{{ value }}</div>
<span>Hello World!!</span>
</body>
</html>

再次启动 Django5Study 项目并在浏览器访问 127.0.0.1:8000 的时候,浏览器能正常访问网页,但无法显示 {{ value }} 的内容,打开浏览器的开发者工具看到,{{ value }} 的内容是不存在的,如下图所示:
在这里插入图片描述
此外,浏览器的开发者工具对于调试 AJAX 和 CSS 样式非常有用。通过生成的网页内容进行分析来反向检测代码的合理性是常见的手段之一,这是通过校验结果与开发需求是否一致的方法来调试项目功能的。

2.7 Django与WSGI(拓展)

在 Python 中,很多 Web 应用框架都支持 WSGI(Web Server Gateway Interface,Web 服务器网关接口),比如 Django、Flask、Tornado 和 Bottle 等。WSGI 是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口协议,它将 Web 服务器(例如 Apache 或 Nginx)的请求转发到后端 Python Web 应用程序或 Web 框架。可能许多人搞不清楚 Django、WSGI 和 Web 服务器(Apache 或 Nginx)三者之间的关系,简单来说,Django 是一个 Web 应用框架,WSGI 是定义 Web 应用框架和 Web 服务器的通信协议。一个完整的网站必须包含 Web 服务器、Web 应用框架和数据库。用户通过浏览器访问网址的时候,这个访问操作相当于向网站发送一个 HTTP 请求,网站首先由 Web 服务器接受用户的 HTTP 请求,然后 Web 服务器通过 WSGI 将请求转发到 Web 应用框架进行处理,并得出处理结果,Web 应用框架通过 WSGI 将处理结果返回给 Web 服务器,最后由 Web 服务器将处理结果返回到用户的浏览器,用户即可看到相应的网页内容,如下图所示:

WSGI 分为两部分:服务端和应用端,服务端也可以称为网关端(uWSGI 或 Gunicorn),应用端也称为框架端(Django 或 Flask 的 Web 应用框架)。我们知道 WSGI 是 Web 服务器(Apache 或 Nginx)与 Web 应用框架(Django 或 Flask 的 Web 应用框架)的通信规范,它没有具体的实现过程,因此由服务端(uWSGI 或 Gunicorn)实现通信过程。换句话说,服务端实现服务器和 Web 应用框架的通信传输。根据实际的网站搭建情况,我们将网站架构分为两级架构和三级架构,如下图所示:

两级架构是将服务端(uWSGI 或 Gunicorn)作为 Web 服务器,许多 Web 框架已经附带了 WSGI 的服务端,比如 Django 和 Flask,因此它们能直接运行启动,但这种架构模式只能在开发阶段使用,在上线阶段是无法使用的,因为服务端的性能比不上专业 Web 服务器(Apache 或 Nginx)。三级架构是将服务端作为中间件,实现 Web 服务器和 Web 应用架构的通信,这种架构模式用于上线阶段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter:Dio下载文件到本地

import dart:io; import package:dio/dio.dart;main(){// 创建dio对象final dio Dio();// 下载地址var url https://*******.org/files/1.0.0.apk;// 手机端路径String savePath Directory.systemTemp.path/ceshi.apk;print(savePath);downLoad(dio,url,savePath); }downLo…

Golang | Leetcode Golang题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …

鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)

元服务是什么&#xff1f;和App的关系&#xff1f; 元服务是是一种HarmonyOS轻量应用形态&#xff0c;用户无需安装即可使用&#xff0c;具备随处可及、服务直达、自由流转的特征。 元服务是可以独立部署和运行的程序实体&#xff0c;独立于应用&#xff0c;不依赖应用可独立…

Exadata: 将数据库硬件和软件设计在一起

Engineering Database Hardware and Software Together&#xff0c;是Juan Loaiza在2015 VLDB大会上的Keynotes。虽然是10年前的文章&#xff0c;但其中一些要点一直延续至今&#xff0c;并未改变。 本文将讲解Keynotes摘要和演讲中的要点。 摘要 其中的一些观点&#xff1a…

Windows配置域名映射IP

一、找到 hosts 文件 打开 C:\Windows\System32\drivers\etc 二、添加hosts文件修改、写入权限 右击hosts文件&#xff0c;点击属性 -> 安全 -> Users -> 编辑 -> Users -> 添加修改、写入权限 -> 确定 -> 确定 进入常规&#xff0c;将只读属性关闭 三、…

173. 二叉搜索树迭代器【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 173. 二叉搜索树迭代器 一、题目描述 实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterato…

XXL JOB DockerCompose部署

官网给的方式是 Docker 命令启动&#xff0c;但是用起来太麻烦了&#xff0c;所以用DockerCompose 简化部署 创建数据库&#xff0c;导入 SQL SQL 脚本位置为/xxl-job/doc/db/tables_xxl_job.sql https://raw.githubusercontent.com/xuxueli/xxl-job/refs/heads/master/doc/…

【原创】如何备份和还原Ubuntu系统,非常详细!!

前言 我在虚拟机装了一个xfce4的Ubuntu桌面版&#xff0c;外加输入法、IDEA等&#xff0c;我想将这个虚拟机里的系统直接搬到物理机中&#xff0c;那我可以省的再重新装一遍、配置xfce4桌面、修改一堆快捷键还有配置idea了&#xff0c;那直接说干就干。 本教程基于Ubuntu24.0…

YOLO系列番外——数据偏移与分布不均对模型的影响分析与炫酷的动态分布图代码分享

背景 在深度学习的应用中&#xff0c;数据质量对模型的性能至关重要。随着智能化应用场景的扩展&#xff0c;数据的复杂性不断增加&#xff0c;如何处理数据偏移&#xff08;Data Shift&#xff09;和数据分布不均&#xff08;Data Imbalance&#xff09;成为了模型训练和部署过…

Shell脚本6 -- 条件判断if

声明&#xff1a; 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程&#xff08;4&#xff09;脚本与用户交互以及if条件判断】的公开分享&#xff0c;所有内容仅限于网络安全技术的交流学习&#xff0c;不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题&#xff0c…

ks 小程序sig3

前言 搞了app版的快手之后 &#xff08;被风控麻了&#xff09; 于是试下vx小程序版的 抓包调试 小程序抓包问题 网上很多教程&#xff0c; github也有开源的工具代码 自行搜索 因为我们需要调试代码&#xff0c;所以就用了下开源的工具 &#xff08;可以用chrome的F12功能&a…

hive 统计各项目下排名前5的问题种类

实现指定某项目下的数据效果图如下所示&#xff1a; 其中 ABCDE 为前5名的问题种类&#xff0c;其中A问题有124个&#xff08;出现了124次&#xff09; 数据说明&#xff1a; 整个数据集 包含很多项目一个项目 包含很多问题一个问题 选项 可认为是 类别值&#xff0c;所有出…

如何解决将长视频转换为易于处理的 Spacetime Patch 的问题?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 将长视频转换为易于处理的 Spacetime Patch&#xff08;时空补丁&#xff09;是一项挑战&#xff0c;尤其是当视频内容复杂或包含长时间连续场景时。在计算机视觉和视频分析等领域&#xff0c;Spacetim…

[ACTF2020]Upload 1--详细解析

信息收集 题目告诉我们是一道upload&#xff0c;也就是文件上传漏洞题目。 进入界面&#xff0c;是一个灯泡&#xff0c;将鼠标放在图标上就会出现文件上传的相应位置&#xff1a; 思路 文件上传漏洞&#xff0c;先看看有没有前端校验。 在js源码中找到了前端校验&#xff…

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…

可认证数据资产合约标准协议(CMIDA-1)意见征集

标准背景 数据资产具备多维度的属性&#xff0c;涵盖行业特性、状态信息、资产类型、存储格式等。数据资产在不同流通主体之间可理解、可流通、可追溯、可信任的重要前提之一是存在统一的标准&#xff0c;缺失统一的标准&#xff0c;数据混乱冲突、一数多源、多样多类等问题将…

为什么 Vue3 封装 Table 组件丢失 expose 方法呢?

在实际开发中&#xff0c;我们通常会将某些常见组件进行二次封装&#xff0c;以便更好地实现特定的业务需求。然而&#xff0c;在封装 Table 组件时&#xff0c;遇到一个问题&#xff1a;Table 内部暴露的方法&#xff0c;在封装之后的组件获取不到。 代码展示为&#xff1a; …

Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍

文章目录 1. Dolby TrueHD特点总结 2. Dolby Digital Plus (E-AC-3)特点总结 Dolby TrueHD 与 Dolby Digital Plus (E-AC-3) 的对比 Dolby TrueHD和Dolby Digital Plus (E-AC-3) 是两种高级的杜比音频编码格式&#xff0c;常用于蓝光影碟、流媒体、影院等高品质音频传输场景。它…

Python Pillow图像编辑

Pillow简介 Pillow 不仅是 PIL 库的“复制版”&#xff0c;而且它又在 PIL 库的基础上增加了许多新的特性。Pillow 发展至今&#xff0c;已经成为了比 PIL 更具活力的图像处理库。 Pillow 的初衷只是想作为 PIL 库的分支和补充&#xff0c;如今它已是“青出于蓝而胜于蓝”。 …

1+X应急响应(网络)系统信息收集分析:

系统信息收集分析&#xff1a; 系统启动项和计划任务分析&#xff1a; 系统进程&#xff0c;服务分析&#xff1a; 内存取证&#xff1a; 系统崩溃转储&#xff1a;