Django介绍
Django介绍
【一】简单介绍
- Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
- Django 是一个高级的 Python Web 框架,用于快速开发可维护和可扩展的 Web 应用程序。
- 使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。
- Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
【二】MVC设计模式
MVC(Model-View-Controller)是一种软件架构模式,用于组织应用程序的代码结构,以实现分离关注点(Separation of Concerns)和模块化设计。在 MVC 架构中,应用程序被分为三个主要部分:
- Model(模型):
- 模型表示应用程序中的数据结构和业务逻辑。
- 它负责处理数据的存储、检索、更新和删除等操作。
- 模型通常与数据库或其他数据存储服务交互,以便获取和更新数据。
- View(视图):
- 视图负责显示用户界面和呈现数据给用户。
- 视图通常是用户能够看到和与之交互的部分,如网页、UI 控件等。
- 视图从模型中获取数据,然后将其呈现给用户。
- Controller(控制器):
- 控制器充当模型和视图之间的协调者。
- 控制器负责处理用户的输入(如点击按钮、提交表单等),并根据输入更新模型或选择合适的视图进行呈现。
- 它包含了应用程序的业务逻辑,并根据用户的操作来调度数据处理和视图的更新。
MVC 架构的主要优点包括:
- 分离关注点:MVC 将应用程序分成三个独立的部分,每个部分专注于不同的任务,有助于降低代码的复杂性,并简化应用程序的维护和扩展。
- 可重用性:由于模型、视图和控制器之间的分离,可以更容易地重用这些组件,从而提高代码的可重用性和可维护性。
- 易于测试:由于每个部分都是相对独立的,因此可以更轻松地对其进行单元测试和集成测试,以确保代码的质量和稳定性。
- 团队协作:MVC 提供了清晰的代码组织结构,使团队成员可以更容易地协作开发和维护应用程序。
简易图。图源:https://www.runoob.com/wp-content/uploads/2020/05/ModelViewControllerDiagramZh.png
用户操作流程图。图源:https://www.runoob.com/wp-content/uploads/2020/05/1589776521-2356-JxrlTyMyPgYnQpOV.png
【三】MTV设计模式
MTV(Model-Template-View)是 Django 框架中采用的一种软件架构模式,类似于 MVC 架构。在 Django 中,MTV 模式的组成部分如下:
- Model(模型):
- 模型代表数据的结构和业务逻辑。
- 它负责与数据库交互,包括数据的创建、读取、更新和删除等操作。
- Django 的模型通常使用 Django 提供的 ORM(对象关系映射)进行数据库操作,使得操作数据库更加简单和高效。
- Template(模板):
- 模板是用户界面的呈现部分。
- 模板负责将数据呈现为用户可以看到的 HTML 页面,以及处理页面中的动态内容和用户交互。
- Django 使用模板语言(Template Language)来编写模板,使得在模板中能够嵌入 Python 代码和逻辑。
- View(视图):
- 视图负责处理用户请求并生成相应的响应。
- 它包含了应用程序的业务逻辑,并根据用户的请求从模型中获取数据,然后将数据传递给适当的模板进行呈现。
- 视图可以是函数视图或基于类的视图,用于处理不同类型的请求,并执行相应的操作。
简易图。图源:https://www.runoob.com/wp-content/uploads/2020/05/MTV-Diagram.png
用户操作流程图。图源:https://www.runoob.com/wp-content/uploads/2020/05/1589777036-2760-fs1oSv4dOWAwC5yW.png
- 关于Django功能性概述的概述可以查看官方文档
【四】Django框架设计原理
图源书籍【ISBN 978-7-121-41643-9】
- WSGI(Web Server Gateway Interface)是 Python 中定义的一种规范,用于连接 Web 服务器和 Web 应用程序框架之间的通信。
- Django 中的 WSGI 主要用于在部署时连接 Django Web 应用程序与 WSGI 兼容的 Web 服务器。当你使用诸如 Gunicorn、uWSGI 或 mod_wsgi 等 WSGI 服务器时,它们将充当 Web 服务器,通过 WSGI 接口调用 Django 应用程序以处理 HTTP 请求。
【五】发展历史
【1】重要版本和里程碑
-
起源
-
2003年: Django项目最初在劳伦斯出版社(Lawrence Journal-World)开始,由Adrian Holovaty和Simon Willison领导,用于管理新闻内容的网站开发。
-
2005年7月: Django被正式公开发布。这标志着它作为一个开源项目的开始,允许全世界的开发者使用和贡献代码。
-
2008年9月: Django项目宣布成立Django软件基金会(DSF),这是一个独立的组织,旨在促进Django软件的发展,维护其开源性质。
-
Django 1.0(2008年):首个稳定版本发布,标志着 Django 框架的成熟和稳定。
-
-
发展
-
Django 1.3(2011年):引入了多个重要功能,包括 Class-based Views(基于类的视图)和 staticfiles(静态文件处理)等。
-
Django 1.4(2012年):引入了数据库迁移(migrations)功能,大大简化了数据库结构的迁移和管理。
-
Django 1.7(2014年):引入了 Django Rest Framework,使得构建 RESTful API 更加方便。
-
Django 2.0(2017年):移除了对 Python 2 的支持,开始全面支持 Python 3。
-
Django 3.0(2019年):引入了异步视图(asynchronous views)和路径参数(path converters)等新功能。
-
Django 3.1(2020年):进一步增强了异步支持,并引入了更多的新特性和改进。
-
Django 3.2(2021年):引入了新的模板块和标签,增强了性能和安全性。
-
【2】各版本特点
-
Django1.x
-
默认不支持异步
-
Django 1.x主要集中在传统的Web开发上,其设计思想倾向于同步HTTP请求处理。
-
默认情况下,并未内置对异步编程的支持,开发者若要在Django 1.x中实现异步处理,通常需要借助第三方库如
django-celery
或django-tornado
等来结合其他异步框架(如Celery、Tornado等)来实现后台任务的异步执行。
-
-
Django2.x
-
默认不支持异步
-
在Django 2.x版本中,虽然核心框架并未直接提供对异步HTTP请求的支持,但已经开始引入一些异步相关的新特性和API,比如
asgi
(Asynchronous Server Gateway Interface) 标准的初步支持。 -
开发者可以通过安装第三方ASGI服务器(如
daphne
或uvicorn
),配合channels
库使用,来实现Websockets和消息队列等场景下的部分异步功能。
-
-
Django3.x
-
自带异步功能
-
Django 3.x标志着其正式对异步编程的支持,它引入了
channels
框架作为标准库的一部分,实现了全栈的WebSocket支持以及与asyncio
的集成,使得开发者可以直接在视图层、消费者层以及中间件层面编写异步代码,提供了ASGI
和HTTP/2
协议的底层支持。 -
此外,
django-redis
、django-socketio
等第三方库也进一步丰富了异步应用的构建能力。
-
-
Django4.x
-
在Django 4.x版本之后,异步功能得到了持续加强和完善。
-
例如,在4.0中,
channels
框架进行了重大重构,使其更加轻量级和模块化,同时引入了websockets
库作为默认WebSocket支持,大大简化了开发者配置和使用的复杂度。 -
此外,对于长期支持计划(LTS)版本,Django会确保异步相关的API和工具在后续更新中得到稳定且兼容的维护和支持,以满足现代Web应用对高性能、低延迟的需求。
-
【2.1】使用3.x版本
- Django1.x在老项目中使用频率最高、最广泛的版本!!!
- Django2.X功能几乎一致
- Django3.X最主要的区别在于新增了一个异步的功能
- 近几年随着技术的迭代和进步,大部分的企业项目已经完成了最基础的迭代,所以学习Django1.x太过于古老
- 我们选择学习低于最新版本的下一个版本 Django 3.x 版本
- Django3.x和Django2.x在语法上区别不大,主要是对某些功能进行了优化,所以问题不大
版本变化
Django安装
【0】Django版本与Python版本对应支持
【1】通过pip安装
pip install django==
# 查看django所有版本
pip install django==3.2.12
# 安装指定版本
pip install django
# 不指定版本默认安装最新版本
【2】通过pycharm安装
【3】验证是否安装成功
- 第一种就是通过上述pycharm查找模块时,可以看到当前环境下所有的模块和版本号
- 第二种
# 通过导入模块是否报错验证是否安装成功
import django
# 查看版本号
res = django.get_version()
print(res) # 3.2.12
- 第三种就是在命令行中输入
pip list
,查看所有的模块和版本号 - 第四种就是在命令行中输入
django-admin
,查看是否正常输出内容
# django-admin 输出常用的命令
Type 'django-admin help <subcommand>' for help on a specific subcommand.
Available subcommands:
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
test
testserver