Django 是 python 做 web 开发的一个很著名的框架,很多大型网站(比如豆瓣、YouTube)都用它开发,下面就来介绍一下 Django 的架构原理
原理
1. MVT设计模式
M(Models):数据模型,直接映射到数据库
V(Views):功能视图,编写你的业务功能
T(Templates):页面模板,就是显示在浏览器的 HTML 文件
2. 架构流程图
流程说明:
①:客户端输入 url ,向服务器发送一个 HTTP 请求
②:WSGI 是一个能响应请求的接口部件,初学可以不管它,它把 url 传给 URLs 路由
③:URLs 根据收到的 url,调用对应绑定的 Views, 所以 URLs 相当于导航
④:Views 是业务功能模块,它先从 Models 模块拿需要的数据
Model 是数据模型模块,它通过 ORM 技术实现从类到数据库的映射,这样我们就可以不关心数据库而只对类进行修改
⑤:Views 从Templates 拿需要的页面模板
⑥:Views 根据 Models 和 Templates 的数据,实现自己的功能后把 HttpResponse 发送给负责响应的 WSGI
不难看出,Views 是整个框架的核心,它不仅关联了 Models、Templates,还实现了业务功能
⑦:WSGI 把响应的内容发给客户端(浏览器),用户就能看到想要的网页了
创建方法与目录介绍
(学习方法强烈推荐官网教程:https://docs.djangoproject.com/zh-hans/2.1/intro/)
Django 官方教程错误
在使用通用视图后,index.html 内容应如下:
{#<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>#}
<ul>
{% for question in latest_question_list %}
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
1. 环境准备
Anaconda3、 一个虚拟环境、用命令 conda install django 安装 django
2. 创建项目
(1) 命令:django-admin startproject mysite (mysite 是自己命名的项目名称)
(2)目录文件:
mysite/ :根目录只是你项目的容器 manage.py :一个让你用各种方式管理 Django 项目的命令行工具 mysite/ :包含你的项目文件的纯 Python 包,里面的文件重要 __init__.py :一个空文件,仅仅告诉 Python 这个目录是一个 Python 包而已 settings.py :整个 Django 项目的配置文件,配置数据库、app、服务器等 urls.py :url 的入口、总目录,负责把 url 导流到对应的 app 的 urls.py (app 稍后介绍) wsgi.py :项目的运行在 WSGI 兼容的Web服务器上的入口,先不管它
3. 创建应用
(1)项目和应用的区别:
应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。项目则是一个网站使用的配置和应用的集合
(2)在 manage.py 同级目录下创建 (也就是跟第二个 mysite 同级,就在第一个 mysite 之下)
(3)命令:python manage.py startapp myapp (myapp 是自己命名的应用名称)
(4)目录文件:
myapp/ :该 app 的文件容器 __init__.py :初始化文件,一个空文件,仅仅告诉 Python 这个目录是一个 Python 包而已 admin.py :管理员文件,管理员的相关功能在这儿编写 apps.py :app 配置文件,先不管 migrations/ :数据库的迁移记录文件的目录,里面有自动生成的迁移记录 __init__.py :初始化文件,空文件,作用同上面的初始化文件一样 models.py :数据模型文件,在这儿按规定格式用类来定义你的数据模型,直接映射到数据库 tests.py :测试文件,里面存放测试用例,测试用例不会改变数据库和其他模块 views.py :视图文件,里面编写业务功能,关联 Models、Templates,返回结果
Django 编写典型流程
已经创建 app 并在 settings 里面注册了 app 前提下
1. 创建数据模型 (MODELs)
数据模型通过 ORM 技术映射到数据库,这样就可以直接操作模型,而不需要关心数据库
过程中自动生成对应的数据库操作语句,但需要了解数据库 API 的使用方法
2. 创建管理员 (admin)
admin 是管理员站点,这样就可以直接管理数据而不用去数据库修改
过程中自动生成管理员界面和对数据库的操作方法
3. 规划路由 (URLs)
url 是路由目录,目录分为总目录和分目录:
(1)project/urls 是总目录,也是 url 的入口,负责把 url 导流到分目录
(2) app/urls 是分目录,每条 url 绑定一个 VIEWs 里面的一个功能函数,其中 url 里的参数用 '<>' (中括号)包裹起来, name 实现对此条 url 的命名,app_name 用于设置命名空间,解析格式为:'namespace: name' 参数
(3)如果匹配不到 url ,Django 会自动调用 404 视图
4. 编写视图 (VIEWS)
视图是 Django 的功能模块,主要任务有:
(1)从对应的 URLs 接收参数
(2)从模型(Models)导入数据
(3)从模板(Templates)绑定模板
(4)根据需要,利用参数、模型、模板编写功能代码
(5)在页面返回 HttpResponse 对象或者 Http404 异常
ps:开发过程中,能使用通用视图的,优先使用通用视图
5. 设计模板 (Templates)
(1) 模板就是 HTML 页面
(2)注意模板语言写法:
变量:'{{ }}' 包裹
语句:'{% %}' 包裹,成对出现,表示到哪儿结束
属性:' . ' 获取,eg:{{ date.attr }}
过滤变量值:用 '|' 进行管道过滤,eg:{{ data.attr|attr:"x,x,x"}}
模板继承:格式:'{% extends "base.html" %}'
这样对 Django 的架构、原理、流程和目录就了解得差不多了,后面我们就根据流程来做个最简单的项目