Python Django框架是什么?
Django 是用 Python 开发的一个免费开源的 Web 框架,几乎囊括了 Web 应用的方方面面,可以用于快速搭建高性能、优雅的网站。
Django 提供了许多网站后台开发经常用到的模块,使开发者能够专注于业务部分。
Django 提供了通用 Web 开发模式的高度抽象,为频繁进行的编程作业提供了快速解决方法,并为“如何解决问题”提供了清晰明了的约定。Django 通过 DRY(Don't Repeat Yourself,不要重复自己)的理念来鼓励快速开发。
补丁版本(A.B.C,如 2.1.3)会根据需要发布,以修复错误和安全问题。这些版本将与相关的功能版本 100% 兼容,除非是出于安全原因或为了防止数据丢失而无法做到 100% 兼容。
正因为如此,“我应该升级到最新的补丁版本吗?”的答案永远都是“是的”。如果之前使用的是 Django 2.1,现在最新的版本是 Django 2.1.3,那么可以放心将 2.1 版本升级到 2.1.3版本。
某些功能版本被指定为长期支持(LTS)版本,这种稳定版本通常自发布之日起 3 年以内,会持续发布安全和关键补丁,即所谓提供持续稳定的支持。
在 Django 官网的下载页面底部,有介绍各种版本的发布和支持生命周期,比较大的变化就是从 Django 2.0 开始,它不再支持 Python 2。
下图演示了 Django 各版本的发布情况和支持计划等:
如果读者必须使用 Python 2,那么最后一个可用的版本是 1.11.x 系列。新项目推荐使用最新的 Django 2.x 系列。
首先来看看什么是 MVC(Model-View-Controller)模式,然后了解 Django MVT(Model-View-Template)的不同之处。
我们可以简单认为 Django 中的模板是 HTML 文件,但其支持 Django 的模板语言。这种模板语言简单来说就是通过占位符、循环、逻辑判断等来控制页面上的内容展示,如下图所示。
与采用 Django 开发相比,开发者在项目开始的时候可能需要花更多的时间去了解、挑选各个组件,正因为这样,Flask 开发的灵活度更高,开发者可以根据自己的需要去选择合适的插件。
由于是自己一步步地将整个系统组装起来的,因此也比较容易了解各个组件部分。当然,Flask 历史相对更短,第三方 App 自然没有 Django 那么全面。
传统的 Apache 服务器会为每个 HTTP 请求连接一个线程,而在大多数 Linux 发行版中默认线程堆(Heap)大小是 8MB,当连接数量过多时,这种线程池的方式极易耗光服务器上的所有资源。Tornado 会把等待资源的操作挂起,当数据准备好时,再回调相应的函数。通过使用非阻塞网络 I/O,Tornado 可以轻松应对数万个连接。因而 Tornado 也就成为长轮询,是 WebSocket 和其他需要与每个用户建立长期连接的应用程序的理想选择。
和 Django 相比,使用 Tornado 编写异步代码对于开发者来说,没有 Django 或 Flask 编写同步代码那么简单、直接和高效。
Python 在性能上确实无法和 C语言、Java 等语言相比,但在大部分情况下使用 Python 开发是可以满足性能需求的,并且很多时候程序性能不够好,这不是语言本身的问题,而是架构设计、缓存设计、数据结构算法的选用以及开发人员编程水平等引起的问题。
总之,使用 Python 语言进行 Web 开发有独特的优势,通常能满足大部分应用场景的需求。
Django 提供了许多网站后台开发经常用到的模块,使开发者能够专注于业务部分。
Django 提供了通用 Web 开发模式的高度抽象,为频繁进行的编程作业提供了快速解决方法,并为“如何解决问题”提供了清晰明了的约定。Django 通过 DRY(Don't Repeat Yourself,不要重复自己)的理念来鼓励快速开发。
特点 | 说明 |
---|---|
自带管理后台 | 只需几行简单代码的设置,就可以让目标网站拥有一个强大的管理后台,轻松对内容进行增加、删除、修改与查找,并且能很方便地定制搜索、过滤等操作,因此特别适合用于内容管理平台。 |
灵活的路由系统 | 可以定义优雅的访问地址,按需定义,毫无障碍。 |
强大的数据库 ORM | 拥有强大的数据库操作接口(QuerySet API),可以轻松执行原生 SQL。 |
易用的模板系统 | 自带强大、易扩展的模板系统。当前后端分离开发时,可以只用 Django 开发 API,不使用模板系统,也可以轻易替换成其他模板。 |
缓存系统 | 与 Memcached,Redis 等缓存系统联合使用,获得更快的加载速度。 |
国际化支持 | 支持多语言应用,允许定义翻译的文字,轻松翻译成不同国家/地区的语言。 |
Django 发布情况
功能版本(A.B,A.B+1,如 2.0,2.1 等)大约每 8 个月发布一次。这些版本将包含新功能以及对现有功能的改进等,也可能包含与上一个版本不兼容的功能,详细的说明在版本的发布日志(Release Notes)中可以查阅到。补丁版本(A.B.C,如 2.1.3)会根据需要发布,以修复错误和安全问题。这些版本将与相关的功能版本 100% 兼容,除非是出于安全原因或为了防止数据丢失而无法做到 100% 兼容。
正因为如此,“我应该升级到最新的补丁版本吗?”的答案永远都是“是的”。如果之前使用的是 Django 2.1,现在最新的版本是 Django 2.1.3,那么可以放心将 2.1 版本升级到 2.1.3版本。
某些功能版本被指定为长期支持(LTS)版本,这种稳定版本通常自发布之日起 3 年以内,会持续发布安全和关键补丁,即所谓提供持续稳定的支持。
在 Django 官网的下载页面底部,有介绍各种版本的发布和支持生命周期,比较大的变化就是从 Django 2.0 开始,它不再支持 Python 2。
下图演示了 Django 各版本的发布情况和支持计划等:
如果读者必须使用 Python 2,那么最后一个可用的版本是 1.11.x 系列。新项目推荐使用最新的 Django 2.x 系列。
Django 的 MVT 架构简介
Django 是一个 Python Web 框架。和大多数框架一样,Django 支持 MVC模式。首先来看看什么是 MVC(Model-View-Controller)模式,然后了解 Django MVT(Model-View-Template)的不同之处。
MVC 模式
MVC(Model-View-Controller)模式是开发 Web 应用程序的一种软件设计模式,其中各部分功能如下:- 模型(Model):位于模式底层,负责管理应用程序的数据。它处理来自视图的请求,并且响应来自控制器的指令以更新自身。
- 视图(View):负责向用户以特定格式呈现全部或部分数据。
- 控制器(Controller):控制模型和视图之间交互的代码。
Django MVT 模式
MVT(Model-View-Template)与 MVC 略有不同。主要区别在于 Django 本身已经实现了控制器(Controller)这部分的功能,暴露给开发者的是模板(Template)。我们可以简单认为 Django 中的模板是 HTML 文件,但其支持 Django 的模板语言。这种模板语言简单来说就是通过占位符、循环、逻辑判断等来控制页面上的内容展示,如下图所示。
Django 和其他 Python Web 框架的对比
用于 Python Web 开发的框架有很多,比如 Flask、Bottle、Pyramid、Webpy 等,这里主要将 Django 同 Flask 与 Tornado 框架分别对比一下。Django 和 Flask 的对比
Flask 是小而精的微框架(Micro Framework),它不像 Django 那样大而全。如果使用 Flask 开发,开发者需要自己决定使用哪个数据库 ORM、模板系统、用户认证系统等,需要自己去组装这些系统。与采用 Django 开发相比,开发者在项目开始的时候可能需要花更多的时间去了解、挑选各个组件,正因为这样,Flask 开发的灵活度更高,开发者可以根据自己的需要去选择合适的插件。
由于是自己一步步地将整个系统组装起来的,因此也比较容易了解各个组件部分。当然,Flask 历史相对更短,第三方 App 自然没有 Django 那么全面。
Django 和 Tornado 的对比
Tornado 是一个 Python Web 框架和异步网络库,最初由 FriendFeed 开发,当初设计它的目的是为了解决 10000 个并发连接(C10K 问题)。传统的 Apache 服务器会为每个 HTTP 请求连接一个线程,而在大多数 Linux 发行版中默认线程堆(Heap)大小是 8MB,当连接数量过多时,这种线程池的方式极易耗光服务器上的所有资源。Tornado 会把等待资源的操作挂起,当数据准备好时,再回调相应的函数。通过使用非阻塞网络 I/O,Tornado 可以轻松应对数万个连接。因而 Tornado 也就成为长轮询,是 WebSocket 和其他需要与每个用户建立长期连接的应用程序的理想选择。
和 Django 相比,使用 Tornado 编写异步代码对于开发者来说,没有 Django 或 Flask 编写同步代码那么简单、直接和高效。
使用 Python 进行 Web 开发合适吗?
Python 简单易学、上手快速,成为很多程序员喜爱的编程语言。使用 Python 进行 Web 应用开发,无疑能够加快需求实现的速度,快速迭代和验证产品的原型。有些人可能会有疑问:Python 性能不够好,用来开发 Web 是不是不太合适?Python 在性能上确实无法和 C语言、Java 等语言相比,但在大部分情况下使用 Python 开发是可以满足性能需求的,并且很多时候程序性能不够好,这不是语言本身的问题,而是架构设计、缓存设计、数据结构算法的选用以及开发人员编程水平等引起的问题。
总之,使用 Python 语言进行 Web 开发有独特的优势,通常能满足大部分应用场景的需求。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算