广州建网站哪家最好,网站开发用什么笔记本,特色的佛山网站建设,网站宣传的手段有哪些目录 一、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 初试Django52.5.1 … 目录 一、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 初试Django52.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 框架学习方法
如何搭建工程程序 工程的组建工程的配置路由定义视图函数定义 如何获取请求数据操作 request 对象如何构造响应数据构造 response 对象框架提供的其他功能组件的使用数据库、模板、admin扩展了解如何搭建生产环境的 Django 服务
注意 光学会 Django 框架是不够的我们还需要学会它的生态圈才能让我们在工作中屹立不倒。
二、Django流程
重点 MVT 流程掌握 M/V/T 的每个模块的功能了解 M/V/T 的流程 创建 Django 项目和应用 视图和 URL 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 的设计十分优美其具有以下特点
对象关系映射Object Relational MappingORM通过定义映射类来构建数据模型将模型与关系数据库连接起来使用 ORM 框架内置的数据库接口可实现复杂的数据操作。URL 设计开发者可以设计任意的 URL网站地址而且还支持使用正则表达式设计。模板系统提供可扩展的模板语言模板之间具有可继承性。表单处理可以生成各种表单模型而且表单具有有效性检验功能。Cache 系统完善的缓存系统可支持多种缓存方式。Auth 认证系统提供用户认证、权限设置和用户组功能功能扩展性强。国际化内置国际化系统方便开发出多种语言的网站。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 的思想被应用在了 eb 开发方面被称为 eb 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 的最后版本。此外新版本还有以下显著的新特性
简化 URL 路由语法使得 Django.urls.path() 方法的语法更简单。功能的导入由模块 Django.urls 实现如 from Django.urls import include, path, re_path。admin 管理系统支持主流的移动设备并新增属性。ModelAdmin.autocomplete_fields 和方法 ModelAdmin.get_autocomplete_fields()。用户认证PBKDF2 密码哈希默认的迭代次数从 36000 增加到 100000。Cache缓存cache.set_many() 现在返回一个列表包含了插入失败的键值。通用视图ContextMixin.extra_context 属性允许在 View.as_view() 中添加上下文。Pagination分页增加 Paginator.get_page()可以处理各种非法页面参数防止异常。Templates模板提高 Engine.get_default() 在第三方模块的用途。Validators验证器不允许 CharField 及其子类的表单输入为空。File Storage文件存储File.open() 可以用于上下文管理器例如 with file.open() as f。连接 MySQL 不再使用 mysqldb 模块改用为 mysqlclient两者之间并没有太大的使用差异。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 的系列。此外新版本还有以下显著的新特性 数据库支持。Django3.0 在数据库支持方面的最大亮点是正式支持了 MariaDB 10.1 及更高版本。对于开发者来说又多了一种数据库选择并且 MariaDB 与 MYSOL 类似并且存储引擎类型更多查询效率更快。 ASGI 支持。ASGI 支持可以说是开发者最期待的 Django3.0 的新功能。ASGI 是异步网关协议接口是介于网络协议服务和 Python 应用之间的标准接口能够处理多种通用的协议类型包括 HTTP、HTTP2 和 WebSocket。Django 3.0 对 ASGI 模式的支持使得 Diango 可以作为原生异步应用程序运维原有的 WSGI 模式将围绕每个 Django 调用运行单个事件循环使异步处理层与同步服务器兼容。在这个改造的过程中每个特性都会经历以下三个实现阶段 多 Sync-only只支持同步也就是当前的情况Sync-native原生同步同时带有异步封装器Async-native原生异步同时带有同步封装器 模型字段选择的枚举。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\amoxiangconda create -n django5_study python3.12
(base) C:\Users\amoxiangconda activate django5_study使用 pip工具安装 Django(django5_study) C:\Users\amoxiangpip install django如下图所示 使用 pip list 命令查询 Python 第三方插件列表具体如下所示
(django5_study) C:\Users\amoxiangpip 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\amoxiangconda activate django5_study(django5_study) C:\Users\amoxiangd:(django5_study) D:\cd Code\dream\PythonStudy
# django-admin startproject 项目名称
(django5_study) D:\Code\dream\PythonStudydjango-admin startproject Django5Study项目创建后可以在 D:\Code\dream\PythonStudy 下看到新创建的文件夹 Django5Study在 PyCharm 下查看该项目的结构如下图所示 Django5Study 项目里包含 Django5Study 文件夹和 manage.py 文件而 Django5Study 文件夹又包含5个 .py 文件。项目的各个文件说明如下
manage.py命令行工具内置多种方式与项目进行交互。在命令提示符窗口下将路径切换到 Django5Study 项目并输入 python manage.py help可以查看该工具的指令信息。__init__.py 初始化文件一般情况下无须修改。asgi.py开启一个 ASGI 服务ASGI 是异步网关协议接口。settings.py项目的配置文件项目的所有功能都需要在该文件中进行配置配置说明会在文章后半部分详细讲述。urls.py项目的路由设置设置网站的具体网址内容。wsgi.py全称为 Python Web Server Gateway Interface即 Python 服务器网关接口是 Python 应用与 Web 服务器之间的接口用于 Django 项目在服务器上的部署和上线一般不需要修改。
在 Web 应用中通常有一些业务功能模块是在不同的项目中都可以复用的故在开发中通常将工程项目拆分为不同的子功能模块各功能模块间可以保持相对的独立在其他工程项目中需要用到某个特定功能模块时可以将该模块代码整体复制过去达到复用。在 Flask 框架中也有类似子功能应用模块的概念即蓝图 Blueprint。Django 的视图编写是放在子应用中的。在 Django 中创建子应用模块目录仍然可以通过命令来操作即
(django5_study) D:\Code\dream\PythonStudycd Django5Study
# 创建子应用命令: python manage.py startapp 子应用名称
(django5_study) D:\Code\dream\PythonStudy\Django5Studypython manage.py startapp chapter01_HelloDjango5再次查看项目 Django5Study 的目录结构如下图所示 从图上图中可以看到项目新建了 chapter01_HelloDjango5 文件夹。在 chapter01_HelloDjango5 文件夹可以看到有多个 .py 文件和 migrations 文件夹说明如下
migrations用于生成数据迁移文件通过数据迁移文件可自动在数据库里生成相应的数据表。__init__.py chapter01_HelloDjango5 文件夹的初始化文件。admin.py用于设置当前 App 的后台管理功能。apps.py当前 App 的配置信息在 Django 1.9 版本后自动生成一般情况下无须修改。models.py定义数据库的映射类每个类可以关联一张数据表实现数据持久化即 MTV里面的模型Model。tests.py自动化测试的模块用于实现单元测试。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]collectstaticfindstaticrunserverDjango 的操作指令共有 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_HelloDjango5chapter01_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 langen
headmeta charsetUTF-8titleTitle/title
/head
body
h1helloDjango5~/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), # ② 设置路由匹配对应的视图函数
]在上述代码里可以简单映射出用户访问网页的过程说明如下
当用户在浏览器访问网址的时候该网址在项目所设置的路由urls.py文件里找到相应的路由信息。然后从路由信息里找到对应的视图函数views.py文件由视图函数处理用户请求。视图函数将处理结果传递到模板文件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 langen
headmeta charsetUTF-8titleHello World/title
/head
body{# 添加错误代码static#}{% static %}spanHello World!!/span
/body
/html当运行 Django5Study 项目并在浏览器访问 127.0.0.1:8000 的时候PyCharm 正下方的调试界面 Console 就会出现异常信息从异常信息中可以找到具体的异常位置如下图所示 除了在 PyCharm 正下方的调试界面 Console 查看异常信息外还可以在浏览器上分析异常信息比如模板文件 helloDjango5.html 的错误语法Django 还能标记出错位置便于开发者调试和跟踪如下图所示 还有一种常见的情况是网页能正常显示但网页内容出现部分缺失。对于这种情况只能使用浏览器的开发者工具对网页进行分析处理。以 templates 的模板文件 helloDjango5.html 为例对其添加正确的代码但在网页里出现内容缺失如下所示
!DOCTYPE html
html langen
headmeta charsetUTF-8titleHello World/title
/head
body
{# 添加正确代码但不出现在网页 #}
divHi,{{ value }}/div
spanHello World!!/span
/body
/html再次启动 Django5Study 项目并在浏览器访问 127.0.0.1:8000 的时候浏览器能正常访问网页但无法显示 {{ value }} 的内容打开浏览器的开发者工具看到{{ value }} 的内容是不存在的如下图所示 此外浏览器的开发者工具对于调试 AJAX 和 CSS 样式非常有用。通过生成的网页内容进行分析来反向检测代码的合理性是常见的手段之一这是通过校验结果与开发需求是否一致的方法来调试项目功能的。
2.7 Django与WSGI拓展
在 Python 中很多 Web 应用框架都支持 WSGIWeb Server Gateway InterfaceWeb 服务器网关接口比如 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 应用架构的通信这种架构模式用于上线阶段。