Django 工作流

299 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

Django 工作流

通过前面简单的例子,相信你对Django开发Web项目有了一个初步的印象。通过一张图来总结一下 Django的处理流程:

image.png

需要说明的是,这个处理流程并没有涉及了Django的全部处理过程,其中最主要的就是缺失了数据层 (model)的操作,但目前我们并没有涉及这一层的操作。

在学习更多Django 开发知识之间,我希望你能把这个处理流程能记下来。因为后续的Django开发都会是在此基础上对每一个步骤的延伸笔扩展。所以,接下来进一步对每个步骤进行解释。

URL组成

作为一个网站的用户,我们首先会在浏览器的URL地栏输入:http://127.0.0.1:8000/index/

URL地址由以下几部分组成: 协议类型:HTTP/HTTPS

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到 本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超 文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP通道,简单讲是HTTP的安全版。

主机地址:itest.info,127.0.0.1

itest.info为一个网址,网址通过域名解析服务器会找到对应的IP主机。 127.0.0.1为一个IP地址,不过,该IP地址比较特殊,用来指向的本机。 端口号:8000

一台主机上有很多应用,不同的应用占用不同的端口号,除了要指定主机(网址或IP地址)之外,还要 进一步指定相应的端口号才能指到具体的应用。

前面我们在运行Django 服务器,默认使用8000的端口号,所以,在浏览器除了输入IP地址之后,还要 指向端口号,才能找到相应的应用。

路径:/index/、/admin

一般用来表示主机上的一个目录或文件地址。

urls的配置

当Django拿到浏览器URL的地址之后,取端口号后面的路径“/index”、“/admin”。然后在urls.py 文件中匹配。

image.png

这里使用了Python的正则表达式。

image.png

通过^index/S 匹配到/index/目录。并且将处理指向sign应用的视图文件 views.py的index函数。

views视图

接下来请求的处理就到了..../sing/views.py中的index视图函数。

image.png

视图在我看来,它在Django中至关重要,是连接页面与数据的中间纽带。拿登录的例子来讲,用户在页面上输入了用户名和密码点击登录。那么request请求会由视图来接收,如何提取出用户名和密码的数据,如何用这些数据去查询数据库,再如何将登录成功的页面返回给用户,这些全部由视图层来完成。

templates 模板

image.png

模板的载体就是我们所熟悉的前端页面了,Django自带的有模板语言。它的主要作用是如何展示数据,比如视图层返回的是一个字符串,要如何显示在页面上;返回的是数组,可如何显示。返回的对象数组要如何显示等。当然,这里为了使页面更漂亮需要借助前端技术,比如css、JavaScript、bootstrap等。

MTV开发模式

进一步探讨一下Django的开发模式。 MTV开发模式

在钻研更多代码之前,让我们先花点时间考虑下Django 数据驱动 Web应用的总体设计。Django的设计 鼓励松耦合及对应用程序中不同部分的严格分割。遵循这个理念的话,要想修改应用的某部分而不影响其它 部分就比较容易了。在视图函数中,我们已经讨论了通过模板系统把业务逻辑和表现逻辑分隔开的重要性。在 数据库层中,我们对数据访问逻辑也应用了同样的理念。把数据存取逻辑、业务逻辑和表现逻辑组合在一起 的概念有时被称为软件架构的Model—View—Controller(MVC)模式。在这个模式中,Model代表数据存取层, View代表的是系统中选择显示什么和怎么显示的部分,Controller指的是系统中根据用户输入并视需要访问模 型,以决定使用哪个视图的那部分。

为什么用缩写?

像MVC这样的明确定义模式的主要用于改善开发人员之间的沟通。比起告诉同事,“让我们采用抽象 的数据存取方式,然后单独划分一层来显示数据,并且在中间加上一个控制它的层”,一个通用的说法会让 你收益,你只需要说:“我们在这里使用MVC模式吧。”。Django紧紧地遵循这种MVC模式,可以称得 上是一种MVC框架。以下是Django中M、V和C各自的含义:

M,数据存取部分,由Django数据库层处理,本章要讲述的内容。

V,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。

C,根据用户输入委派视图的部分,由Django 框架根据 URLconf设置,对给定URL 调用适当的 Python 函数。

由于C由框架自行处理,而Django里更关注的是模型(Model)、模板(Template)和视图(Views), Django 也被称为MTV 框架。在MTV开发模式中:

M代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取、如何验证有效 T代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显 示。

V代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。你可以把它看 作模型与模板之间的桥梁。

如果你熟悉其它的MVC Web开发框架,比方说Ruby on Rails,你可能会认为Django视图是控制器,而 Django 模板是视图。很不幸,这是对MVC不同诠释所引起的错误认识。在Django对MVC的诠释中,视图 用来描述要展现给用户的数据;不是数据如何展现,而且展现哪些数据。相比之下,Ruby on Rails及一些同 类框架提倡控制器负责决定向用户展现哪些数据,而视图则仅决定如何展现数据,而不是展现哪些数据。

两种诠释中没有哪个更加正确一些。重要的是要理解底层概念。