
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。
1.MVC与MTV模型
1.1 MVC
Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
1.2 MTV
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
- M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
- T 代表模板 (Template):负责如何把页面展示给用户(html)。
- V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
以上内容借鉴自 点击原文《Django框架——Django简介》
2. 开始的准备工作
2.1 HTTP协议消息的格式
1.请求(request)
请求方法 路径 HTTP/1.1\r\n
k1:v1\r\n
…\r\n
\r\n
请求体 <– 可以有,可以没有2.响应(response)
HTTP/1.1 状态码 状态描述符\r\n
k1:v1\r\n
Content-Type: text/html; charset=utf8\r\n
\r\n
响应正文 <– HTML内容3.GET请求和POST请求
- GET请求:
- 浏览器请求一个页面
- 搜索引擎检索关键字的时候
- POST请求:
- 浏览器向服务端提交数据,比如登录/注册等
- GET请求:
2.2 Python web框架的本质
- 收发socket消息 –> 按照HTTP协议消息格式去解析消息
- 路径和要执行的函数的对应关系 –> 主要的业务逻辑
- 字符串替换 –> 模板(特殊符号 –> 数据)
- 一个完整得请求流程:
- 启动服务端,等待客户端(用户的浏览器)来连接
- 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求
- 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数
- 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容
- 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应)
- 浏览器收到响应的消息之后,按照HTML的规则渲染页面.
- 关闭连接
2.3 Django项目基本命令
- 创建项目:
1
django-admin startproject 项目名
- 命令行启动项目:
1
2
3python3 manage.py runserver IP:端口 --> 在指定的IP和端口启动
python3 manage.py runserver 端口 --> 在指定的端口启动
python3 manage.py runserver --> 默认在本机的8000端口启动 - 创建app:
1
python3 manage.py startapp app名字
2.4 Django静态文件配置
- 1.Templates(存放HTML文件的配置) <– 告诉Django去哪儿找我的HTML文件。
- 2.静态文件(css/js/图片)
1
2#静态文件保存目录的别名
STATIC_URL = '/static/'1
2
3
4
5
6
7'''
所有静态文件(css/js/图片)都放在该特定文件夹中
下面的路径可指定多个,全都使用别名来引用,会自动从下面的目录中依次查找文件
'''
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
2.5 注释掉setting.py中 带有 csrf 的那一行(大概45~47行)
3. Django的ORM
3.1 什么是ORM
ORM 全拼Object-Relation Mapping.中文意为 对象-关系映射.在MVC/MVT设计模式中的Model模块中都包括ORM
3.2 ORM优势
- 只需要面向对象编程, 不需要面向数据库编写代码.
对数据库的操作都转化成对类属性和方法的操作。
不用编写各种数据库的sql语句。- 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异。
不在关注用的是mysql、oracle…等。
通过简单的配置就可以轻松更换数据库, 而不需要修改代码。
3.3 ORM劣势
- 相比较直接使用SQL语句操作数据库,有性能损失。
- 根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失。
3.4 ORM和数据库关系
- 每个模型都是一个Python类,它是django.db.models.Model的子类。
- 模型的每个属性都代表一个数据库字段。
- 综上所述,Django为您提供了一个自动生成的数据库访问API。

3.4 使用Django的ORM详细步骤
- 自己动手创建数据库
1
create database 数据库名;
- 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
1
2
3
4
5
6
7
8
9
10
11
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'NAME': "day61",
'USER': 'root',
'PASSWORD': '123456'
}
} - 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库。
在项目/init.py文件中,写下面两句:
1
2
3import pymysql
pymysql.install_as_MySQLdb() - 在app下面的models.py文件中定义一个类,这个类必须继承models.Model
1
2class 类名(models.Model):
... - 执行两个命令
1
2python3 manage.py makemigrations # 保存修改操作信息,类似于.git相关操作
python3 manage.py migrate # 执行
未完待续哦…



