Django是一个开源的Web应用框架,开发语言为Python。采用MVC软件设计模式,即模型M,视图V和控制器C。
1.1 组件
Django框架核心包括:
- 一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关系型数据库间的媒介
- 一个基于正则表达式的URL分发器
- 一个视图系统,用于处理请求
- 一个模板系统
核心框架的其他内容:
- 一个轻量级的、独立的Web服务器,用于开发和测试
- 一个表单序列化及验证系统,用于HTML表单和适用于数据库存储的数据之间的转换
- 一个缓存框架,并有几种缓存方式可供选择
- 中间件支持,允许对请求处理的各个阶段进行干涉
- 内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信
- 一个序列化系统,能够生成或读取采用XML或JSON表示的Django模型实例
- 一个用于扩展模板引擎能力的系统
1.2 内置应用
Django包含了很多应用在他的”contrib”包中,这些包括:
- 一个可扩展的认证系统
- 动态站点管理界面
- 一组产生RSS和Atom的工具
- 一个灵活的评论系统
- 产生Google站点地图(Google Sitemaps)的工具
- 防止跨站请求伪造(cross-site request forgery)的工具
- 一套支持轻量级标记语言(Textile和Markdown)的模板库
- 一套协助创建地理信息系统(GIS)的基础框架
1.3 服务的部署
Django可以运行在启用了mod python的Apache 2上,或是任何WSGI兼容的Web服务器。Django也有启动FastCGI服务的能力,因此能够应用于任何支持FastCGI的机器上。
二. MVC设计模式MVC是一种软件架构模式,把软件分为三个部分:模型(Model)、视图(View),控制器(Controller)。
MVC模式的目的在于实现一种动态的程序设计,使得后续对程序的修改和扩展简单化,并且是程序集某一部分的重复利用成为可能。
MVC各自的功能为:
- 控制器 - 负责转发请求,对请求进行处理。
- 视图 - 界面设计人员进行同行界面的设计
- 模型 - 程序员编写程序应有的功能(实现算法等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)
2.1 组件的互动
MVC之间的相互作用:
- 模型:用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。”Model”有对数据直接访问的权力,例如对数据库的访问。”Model”不依赖”View”和”Controller”,也就是说,Model不关心他会被如何显示或者是如何操作。但是Model中的数据变化一般会通过 一种刷新机制被公布。为了实现这种机制,那些用于监视次Model的View必须事先在此Model上注册。从而,View可以了解Model中发生的变化。
- 视图:能够实现数据有目的显示(理论上,这不是必须的)。在View中一般没有程序上的逻辑。为了实现View上的刷新功能,View需要访问他见识的数据模型(Model),因此应该事先在被他监视的数据那里注册。
- 控制器:起到不同层面的组织作用,用于控制应用程序的流程。他处理事件并作出相应。”事件”包括用户的行为和数据Model上的改变。
3.1 MVC与MTV对应关系
先用一张表表示一下MVC与MTV之间的关系,然后详细阐述
MVC | MTV |
---|---|
Model | Model(Data Access Logic) |
View | Template(Presentation Logic) |
View | View(Business Logic) |
Controller | Django itself |
可以看出Django将MVC中的View给拆分开了,这样做有什么好处呢?
在MVC中View是用来呈现获取的资料给使用者,所以View的目的是”呈现哪一份”资料,而不是”资料如何呈现”
Django的View是URL的回调函数,回调函数决定哪一个资料会被获取,所以View描述的是”你看到什么”,而不是你看到什么内容。
那么内容呢,Django将内容(content)从展现的视图中分离了出来,采用模板(Template)来描述看到的”内容”。
由上可以得出,Django的View和Template都是对应到MVC的View的。
而MVC中的Controller对应到Django中应该就是Django自身。Django在收到请求之后,决定调用适当的View
3.2 MTV的工作流程
四. 一些命令行工具# 创建项目
django-admin startproject mysite
# 创建应用
cd mysite
python3 manage.py startapp app_demo
# 启动项目
python3 manage.py runserver
# 生成同步数据库的脚本
python3 manage.py makemigrations
# 同步数据库
python3 manage.py migrate
# 清空数据库
python3 manage.py flush
# 创建超级管理员
python3 manage.py createsuperuser
# 导入/导出数据
python3 manage.py dumpdata appname > appname.json # 导出
python3 manage.py loaddata appname.json # 导入
# 数据库命令行
python3 manage.py dbshell # 在这个终端可以执行SQL语句
# 启动shell交互
python3 manage.py shell
# 与直接运行python3进入的shell区别是,可以在这个shell中调用当前项目的models.py中的API,
# 便于数据库操作和一些简单的测试
# 命令列表
python3 manage.py
# 详细的命令列表,用于查询命令的