我从 django 学到了什么?

作者: 学以致用123 | 来源:发表于2018-05-17 13:55 被阅读54次

    接触 django 已经一年半了,其间使用 django 实现了三个上线项目,并且完成了 《django by example》一书的四个项目。在这里稍作总结。

    为什么选择 django ?


    由于之前四五年的时间里一直在使用 python 做数据分析和系统优化的工作,因此,当需要展示这些工作时选择 python 的 web框架成了及其自然的事情。那么,python 的 web 框架有很多,为什么选择 django 呢?

    其实最初原因只有两个:

    1. django 的文档完备,官网的快速入门例子以及可以直接使用的 admin 应用。这使得 django 的入门门槛非常低。

    2. django 源码结构清晰,遇到问题可以很轻松的找到源码进行分析。

    django 架构


    web 框架的功能简单来说是接收网络请求并作出相应的响应。django 通过中间件对请求和响应进行了处理。处理必须使用的中间件,django 内置许多可选的中间件,此外,我们还可以开发自己的中间件来满足项目的特殊需求。


    middleware.png

    上图中的 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 的优点可以总结为以下几点:

    1. 内置 admin,后台管理非常简单;

    2. 内置权限应用,权限处理非常简单(但是不能设置单条记录的权限,django 的 rest 框架可以实现)。

    3. 模型 querysets 功能非常强大,可以非常简单的获取数据库中的数据。

    4. 内置大量类视图,视图开发非常简单。

    5. 表单处理非常方便。

    从《 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 似乎是无用之功,但是这个旅程真的非常美妙...

    相关文章

      网友评论

      • jingkeke:请问一下,你感觉Django与主流的react前端框架结合效果怎么样,要有权限控制,有这方面的推荐资料吗。我看过点Django,看它是用的自己的模板语法拼前端。
        jingkeke:@学以致用123 嗯嗯。
        学以致用123:不好意思,没有用过,所以没法评价。不过, django 确实使用 template 实现前端,但还是需要自己写 js 实现一些功能。django rest (参考 django by example CH12)的权限管理比django要好,前段时间开发了一个小程序的后台,运行起来还可以
      • 秋枫鹤泣:三个上线项目,是那种类型的?
        学以致用123:@秋枫鹤泣 能源监控、室内环境监控
      • 地鼠2018:flask怎么样?刚学完Python基础,正在看flask开发实战😀
        学以致用123:@地鼠2018 没学过 flask,所以不好评价,如果这本书有英文版,建议结合一起看,读过几本翻译到中文书,看不懂的地方查原版,发现很多是翻译问题😓

      本文标题:我从 django 学到了什么?

      本文链接:https://www.haomeiwen.com/subject/dwddcftx.html