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 help

Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[auth]
    changepassword
    createsuperuser

[contenttypes]
    remove_stale_contenttypes

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    optimizemigration
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

[sessions]
    clearsessions

[staticfiles]
    collectstatic
    findstatic
    runserver

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 render


def 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_django5

urlpatterns = [
    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 应用架构的通信,这种架构模式用于上线阶段。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合&#xff0c;AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革&#xff0c;在投入提升与政策扶植的双重作用下&#xff0c;以大模型技术为底座、结合专业化金融能力的金融大…

深入内核讲明白Android Binder【一】

深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…

新一代API开发工具,让API调试更快 更简单

新一代API开发工具 代理调试 请求测试一站式解决方案 Reqable Fiddler Charles Postman, 让API调试更快 &#x1f680; 更简单 &#x1f44c; 直接上下载地址 根据系统,下载对应的版本即可 https://reqable.com/zh-CN/download/

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。

文件地址 https://github.com/yanx27/Pointnet_Pointnet2_pytorch?spm5176.28103460.0.0.21a95d27ollfze Pointnet_Pointnet2_pytorch\log\classification\pointnet2_ssg_wo_normals文件夹改名为Pointnet_Pointnet2_pytorch\log\classification\pointnet2_cls_ssg "E:…

时间序列关于可解释性值得关注的论文汇总-第2篇

前言 这是时序可解释性论文汇总的第二篇&#xff0c;第一篇见这里&#xff08;后台回复&#xff1a;“论文合集”可直接获取整理的文章&#xff09;。深度学习的可解释性研究一直是热门&#xff0c;而时间序列的可解释性同样非常重要。这是因为时序模型被大量应用到特定领域&a…

DataStream编程模型之数据源、数据转换、数据输出

Flink之DataStream数据源、数据转换、数据输出&#xff08;scala&#xff09; 0.前言–数据源 在进行数据转换之前&#xff0c;需要进行数据读取。 数据读取分为4大部分&#xff1a; &#xff08;1&#xff09;内置数据源&#xff1b; 又分为文件数据源&#xff1b; socket…

Java面试题2024-Java基础

Java基础 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 3、与平台无关性&#xff08;JVM是Java跨平台使用的根本&#xff09; 4、可靠安全 5、支持多线程 2、…

数据结构(基本概念及顺序表——c语言实现)

基本概念&#xff1a; 1、引入 程序数据结构算法 数据&#xff1a; 数值数据&#xff1a;能够直接参加运算的数据&#xff08;数值&#xff0c;字符&#xff09; 非数值数据&#xff1a;不能够直接参加运算的数据&#xff08;字符串、图片等&#xff09; 数据即是信息的载…

使用爬虫获取的数据如何有效分析以优化店铺运营?

在数字化时代&#xff0c;数据已成为电商运营的核心。通过爬虫技术&#xff0c;我们可以从淘宝等电商平台获取大量数据&#xff0c;这些数据如果得到有效分析&#xff0c;将极大助力店铺运营的优化。本文将探讨如何使用爬虫技术获取数据&#xff0c;并利用数据分析来优化店铺运…

c++类对象练习

#include <iostream> #include <cstring>using namespace std;class mystring {char* buf; public:mystring(); //构造函数mystring(const char* str); //构造函数void show(); //输出函数void setmystr(const mystring str); //设置函数const char* getmystr() co…

后端:Spring AOP原理--动态代理

文章目录 1. Spring AOP底层原理2. 代理模式3. 静态代理4. 动态代理4.1 jdk 实现动态代理4.2 cglib 实现动态代理4.3 jdk、cglib动态代理两者的区别 1. Spring AOP底层原理 创建容器 new applicationContext()&#xff1b;Spring把所有的Bean进行创建&#xff0c;进行依赖注入…

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…

【Linux】进程的状态详解

进程的状态详解 一、各种状态的概念二、运行状态的详细介绍三、阻塞状态详解四、挂起状态和阻塞状态的关系五、观察各种状态在linux中的表示1.运行态R2.睡眠态S3.暂停态T4.深度睡眠状态D5.僵尸状态Z6.孤儿进程 一、各种状态的概念 为了弄明白正在运行的进程是什么意思&#xf…

python高级之简单爬虫实现

一、前言 场景1&#xff1a;一个网络爬虫&#xff0c;顺序爬取一个网页花了一个小时&#xff0c;采用并发下载就减少到了20分钟。 场景2&#xff1a;一个应用软件优化前每次打开网页需要3秒&#xff0c;采用异步并发提升到了200毫秒。 假设一个工程的工作量为100&#xff0c…

web——upload-labs——第十关——.空格.绕过

审计源码 这次先删除文件名左右的空格&#xff0c;然后又删除了我们文件末尾的.&#xff0c;其次将我们上传的文件名转换为小写&#xff0c;删除文件末尾的::$DATA&#xff0c;最后又删除了文件名左右两侧的空格 根据他的逻辑&#xff0c;我们可以构造文件名phpinfo.php. .就是…

Percona XtraBackup备份docker版本mysql 5.7

my.cnf配置文件 [client] default_character_setutf8[mysqld] # 数据存储目录&#xff08;必须手动指定&#xff09; datadir/var/lib/mysql/data# 字符集 collation_server utf8_general_ci character_set_server utf8 # 二进制日志 server-id1 log_bin/var/log/mysql/binl…

JavaWeb之Vue

前言 这一节讲Vue 1. Vue概述 这些都是DOM的操作 原来模型和视图不能实现同步变化&#xff0c;但是Vue就可以了 2. 快速入门 1. 2. <script src"js/vue.js"></script><div id"app"> <!-- 准备一个input输入框,绑定一个模…

汽车资讯新篇章:Spring Boot技术启航

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

Windows注册表基础学习

修改注册表让cmd ascii输出有颜色 reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 如何打开注册表编辑器 运行regedit 按下"Winr"组合键&#xff0c;在打开的"运行"对话框中输入"regedit"&#xff0c;单击"确定"…