一、Django介绍
具体介绍Django之前,必须先介绍web框架等概念。web框架简单来说就是别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。
Django的主要目的是简便、大而全、快速地开发。其优缺点也很明显:
优点:
- 自带轮子众多,方便快速开发,如ORM、Auth、Cache、Template、Form等核心组件。
- 实用的后台管理,自带了一个后台管理界面。
- 简洁的URL设计,都是使用正则匹配即可。
- 周边的插件丰富。
- 插拔式App设计模式。
- 天生的MVC设计模式(更确切的说是MTV)
缺点:
- Django大而全,所以就是重,也是他的设计哲学,开发者可能会用到的功能都会当做核心模块做进系统,不像Flask这种都是模块化,可选择安装,Django都是必须安装。
- 系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的ORM、Template。要在Django 里用SQLAlchemy或Mako几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。
- Django自带的ORM远不如SQLAlchemy强大,除了在Django这一亩三分地,SQLAlchemy是Python世界里事实上的ORM标准,其它框架都支持SQLAlchemy了,比如Flask,唯独Django仍然坚持自己的那一套。Django的开发人员对SQLAlchemy的支持也是有过讨论和尝试的,不过最终还是放弃了,估计是代价太高且跟Django其它的模块很难合到一块。
- Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter。而Flask使用Python非常流行的jinja2模板。
Django架构总览图,如下:
其它基于python的web框架,如tornado、flask、webpy都是在这个范围内进行增删裁剪的。例如tornado用的是自己的异步非阻塞“wsgi”,flask则只提供了最精简和基本的框架。Django则是直接使用了WSGI,并实现了大部分功能。
MVC模式
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django里更关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。它们各自的职责如下:
层次
|
职责
|
模型(Model),即数据存取层
|
处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
|
视图(View),即表现层
|
处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
|
模板(Template),即业务逻辑层
|
存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。
|
从以上表述可以看出Django视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django模板仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为Django视图和Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。
至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。URLconf对于URL的规则没有任何限制,你完全可以设计成任意的URL风格,不管是传统的,RESTful的,或者是另类的。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作。在写程序的时候,只要调用相应的方法就行了,感觉很方便。程序员把控制层东西交给Django自动完成了。只需要编写非常少的代码完成很多的事情。所以,它比MVC框架考虑的问题要深一步,因为我们程序员大都在写控制层的程序。现在这个工作交给了框架,仅需写很少的调用代码,大大提高了工作效率。
二、Django安装
CentOS平台使用
1 2 |
$ yum install python-devel python-setuptools python-pip $ pip install django |
检查django
1 2 3 |
>>> import django >>> django.VERSION (1, 11, 5, u'final', 0) |
Django中文文档:https://yiyibooks.cn/xx/Django_1.11.6/index.html