接触 django 已经一年半了,其间使用 django 实现了三个上线项目,并且完成了 《django by example》一书的四个项目。在这里稍作总结。
为什么选择 django ?
由于之前四五年的时间里一直在使用 python 做数据分析和系统优化的工作,因此,当需要展示这些工作时选择 python 的 web框架成了及其自然的事情。那么,python 的 web 框架有很多,为什么选择 django 呢?
其实最初原因只有两个:
django 的文档完备,官网的快速入门例子以及可以直接使用的 admin 应用。这使得 django 的入门门槛非常低。
django 源码结构清晰,遇到问题可以很轻松的找到源码进行分析。
django 架构
web 框架的功能简单来说是接收网络请求并作出相应的响应。django 通过中间件对请求和响应进行了处理。处理必须使用的中间件,django 内置许多可选的中间件,此外,我们还可以开发自己的中间件来满足项目的特殊需求。
上图中的 view 部分是需要开发者完成的,具体实现时需要完成模型、视图和模板的开发。
模型
模型创建
django 内置模型基类以及覆盖大多数字段的字段类,因此,使用 django 创建模型只需继承模型基类并且设置相应字段即可。当然,还可以很方便的定义一对一、一对多和多对多的关系。
Django 还支持模型继承,提供抽象模型、多表模型、代理模型。模型继承工作方式与 Python 的标准类继承相似。
django 还提供 contenttype 来更加灵活地建立某一字段与不同模型的关系。
模型使用
django 的模型默认包含名为 objects 的管理器,可以很方便的使用 模型名称.objects 对数据库中对应的数据表进行操作。
如果需要获取内容直接使用.objects.filter() 得到 QuerySet 即可。QuerySet 功能非常强大,而且比使用 sqlalchemy 获取数据库中的数据操作更加简单。
ModelForm 可以使用表单操作模型
django 提供 ModelForm 可以很简单的建立表单并将表单数据保存到模型中。
内置处理模型的类视图
django 提供 DetailView、LIstView 可以很容易的获取模型中的单条、多条记录。
django 还提供 CreateView、UpdateView、DeleteView 来操作模型内容。
我们实现视图时可以通过继承相应的积累快速实现功能。
视图
提供权限类的通用视图
django 内置一整套权限应用,我们可以直接拿来使用,当然,如果模板与自己网站风格不同,在相应位置设置模板即可。
内置大量的类视图
django 内置大量的类视图,我们创建视图时可以通过继承相应的类视图简化开发工作。
模板
django 提供了大量的标签和过滤器,可以直接使用。此外,我们还可以自己创建自定义标签和过滤器。
django 的优点
django 的优点可以总结为以下几点:
内置 admin,后台管理非常简单;
内置权限应用,权限处理非常简单(但是不能设置单条记录的权限,django 的 rest 框架可以实现)。
模型 querysets 功能非常强大,可以非常简单的获取数据库中的数据。
内置大量类视图,视图开发非常简单。
表单处理非常方便。
从《 django by example 》学到了什么?
《 django by example 》通过四个项目不仅讲解了 django 的使用方法,还包含许多 django 以外的知识,比如 JavaScript、redis、Celery、RESTful API 等。
除了具体知识,这本书使用的编程哲学也非常好,印象最深刻的在于 PDF的实现方法。
Python 包含很多生成 PDF文件的库文件,比较受欢迎的是 Reportlab ,Reportlab 需要为 PDF 文件添加自定义样式和格式,使得生成 PDF 的成本非常高。曾经用了半天的时间了解这个库,但是由于免费版开发非常复杂,收费版太贵而放弃。
《 django by example》巧妙的回避了这个问题,采用渲染 HTML 模板然后使用 WeasyPrint 将其转换为 PDF 的方法,这样使 Python 远离了表示层 。深深的体会了一把各司其职的好处。
学了 django 下一步学习什么?
django rest 框架。可以先从这里处理了解一下它的强大功能。然后慢慢学起...
对于一个做数据分析和系统优化的工作的人来说,学习 django 似乎是无用之功,但是这个旅程真的非常美妙...