首页 > Django 阅读数:1359

Python Django框架教程(入门版)

Django 是用 Python 开发的一个免费开源的 Web 框架,几乎囊括了 Web 应用的方方面面,可以用于快速搭建高性能、优雅的网站。

Django框架图标
图1:Django 框架图标

Django 提供了许多网站后台开发经常用到的模块,使开发者能够专注于业务部分。Django 提供了通用 Web 开发模式的高度抽象,为频繁进行的编程作业提供了快速解决方法,并为“如何解决问题”提供了清晰明了的约定。Django 通过 DRY(Don't Repeat Yourself,不要重复自己)的理念来鼓励快速开发。

Django 有以下几个特点:

1) 自带管理后台

只需几行简单代码的设置,就可以让目标网站拥有一个强大的管理后台,轻松对内容进行增加、删除、修改与查找,并且能很方便地定制搜索、过滤等操作,因此特别适合用于内容管理平台。

2) 灵活的路由系统

可以定义优雅的访问地址,按需定义,毫无障碍。

3) 强大的数据库 ORM

拥有强大的数据库操作接口(QuerySet API),可以轻松执行原生 SQL。

4) 易用的模板系统

自带强大、易扩展的模板系统。当前后端分离开发时,可以只用 Django 开发 API,不使用模板系统,也可以轻易替换成其他模板。

5) 缓存系统

与 Memcached,Redis 等缓存系统联合使用,获得更快的加载速度。

6) 国际化支持

支持多语言应用,允许定义翻译的文字,轻松翻译成不同国家/地区的语言。

Django 发布情况

Django 包括以下几个版本的划分:

1) 功能版本

功能版本(A.B,A.B+1,如 2.0,2.1 等)大约每 8 个月发布一次。这些版本将包含新功能以及对现有功能的改进等,也可能包含与上一个版本不兼容的功能,详细的说明在版本的发布日志(Release Notes)中可以查阅到。

2) 补丁版本

补丁版本(A.B.C,如2.1.3)会根据需要发布,以修复错误和安全问题。

这些版本将与相关的功能版本 100% 兼容,除非是出于安全原因或为了防止数据丢失而无法做到 100% 兼容。因此,“我应该升级到最新的补丁版本吗?”的答案永远都是“是的”。如果之前使用的是 Django 2.1,现在最新的版本是 Django 2.1.3,那么可以放心将 2.1 版本升级到 2.1.3 版本。

3) 长期支持版

某些功能版本被指定为长期支持(LTS)版本,这种稳定版本通常自发布之日起 3 年以内,会持续发布安全和关键补丁,即所谓提供持续稳定的支持。

在 Django 官网的下载页面底部,有介绍各种版本的发布和支持生命周期,比较大的变化就是从 Django 2.0 开始,它不再支持 Python 2。如图2所示,可以看到 Django 各版本的发布情况和支持计划等。

Django各版本的发布情况和支持计划
图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 应用程序的一种软件设计模式,其中各部分功能如下:

Django MVT 模式

MVT(Model-View-Template)与 MVC 略有不同。主要区别在于 Django 本身已经实现了控制器(Controller)这部分的功能,暴露给开发者的是模板(Template)。

我们可以简单认为 Django中 的模板是 HTML 文件,但其支持 Django 的模板语言。这种模板语言简单来说就是通过占位符、循环、逻辑判断等来控制页面上的内容展示,如图3所示。

Django 中的 MVT 模式
图3:Django 中的 MVT 模式

Django 和主流 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 编写同步代码那么简单、直接和高效。

Django 开发环境选择

主流的操作系统有 Windows,Linux,MacOS 等,由于在 Linux 系统部署 Django 应用是主流方式,因此如果读者对 Linux 比较熟悉,推荐大家使用 Linux 进行 Django 开发。不过,因为 Python 是跨平台的,所以无论在哪个平台上进行 Django 开发都没有问题。

Windows 平台

对于 Windows 用户,推荐使用 Anaconda 来搭建开发环境。Anaconda 是一个集成了 Python 和众多 Python 包的工具,比如 Django、MySQL 驱动、Matplotlib 图像处理相关的包等,省去开发者需要逐个安装各个包的烦琐步骤。

Anaconda 的官方下载地址为:https://www.anaconda.com/download/

使用国内镜像源加速,比如使用清华大学开源软件镜像站,可以加速 Python 包的下载过程。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn
/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn
/anaconda/pkgs/main/
conda config --set show_channel_urls yes

详见 https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

Mac 平台

可以从 Python 官网直接下载 Python 3 安装到 Mac 上,但笔者更推荐使用 brew 工具来安装,使用非常方便,从 https://brew.sh 网站上可以看到,直接运行下面的命令就可以安装这个工具。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


brew 工具常用命令的示例如下:
下面使用 brew 来安装 Python 3:

$ brew install python3 或 brew install python@3

Linux 平台

在 Ubuntu/Debian 系统下,如果没有自带 Python 3,可以使用 apt-get 命令来安装。在 RedHat/CentOS 系统下可以使用 yum 来安装。

【拓展阅读】Python 适合 Web 开发吗?

Python 简单易学、上手快速,成为很多程序员喜爱的编程语言。使用 Python 进行 Web应用开发,无疑能够加快需求实现的速度,快速迭代和验证产品的原型。有些人可能会有疑问:Python 性能不够好,用来开发 Web 是不是不太合适?

Python 在性能上确实无法和 C语言、Java 等语言相比,但在大部分情况下使用 Python 开发是可以满足性能需求的,并且很多时候程序性能不够好,这不是语言本身的问题,而是架构设计、缓存设计、数据结构算法的选用以及开发人员编程水平等引起的问题。

总之,使用 Python 语言进行 Web 开发有独特的优势,通常能满足大部分应用场景的需求。