repo: github.com/alphardex/p…python
最近把《django by example》的项目差很少都撸完了,是时候该写个小结了。git
我的体会:django的api能够说是不少很全,这辈子都不可能全记住的。github
其实,懂得速查文档就没有什么大问题。redis
大量的封装虽然牺牲了必定的灵活性,但大大提升了开发效率,或许这就是django的哲学吧。sql
准备
首先,你能够用django-admin来生成你的项目。shell
不过笔者更建议用一个脚手架来快速生成一个启动模板。数据库
核心工做流
Django的核心是MVC,更准确来讲是MVT(Model-View-Template)django
首先建立app,并在settings中的INSTALLED_APPS添加其配置,在全局urls中经过include引入app的全部urlflask
接下来才是最关键的3步:bootstrap
- 在models.py中定义好数据模型并迁移它们
- 在views.py中编写视图函数,并在urls.py中为其建立相应的映射
- 在templates文件夹中编写要渲染的模板HTML
数据模型的定义其实就是定义各类各样的字段,还有个Meta类能够定义一些元数据(好比字段的排序等),此外你也能够为模型封装一些method来简化视图的编写。
视图函数的编写主要涉及如下方面:模型的CRUD、表单的处理、模板的上下文渲染(必须熟悉HTTP)
视图函数分2种:函数和类(即FBV和CBV)。二者各有利弊,根据需求自行权衡。目前来讲后者在django中比较流行。
给视图添加额外功能:FBV用装饰器,CBV用Mixin。
模板的编写主要涉及:上下文的渲染、if、for、with语句、过滤器、继承等
后台管理
其实在定义完数据模型后就已经能够从admin开始玩起了(初次进入须要建立一个超级用户)。
把数据模型统统注册上去,以便进行CRUD。
其余杂项
- 数据模型的Meta元信息(ordering、abstract等)
- 利用Manager来简化查询
- 熟悉QuerySet的各类接口和查询方法(好比Q、select_related等)
- 懂得如何优化查询
- 利用Library实现自定义标签
- 建立sitemaps来优化SEO
- 建立feeds来提供RSS订阅功能
- 利用Postgresql来实现全文搜索
- 利用Ajax来优化用户体验
- 利用contenttypes来追踪models(好比实现用户活动流)
- 利用signals来反规范化计数
- 利用Redis实现各类功能(缓存、计数、排行榜等)
- 利用sessions在服务端存储数据(好比购物车)
- 利用celery实现异步任务(好比邮件发送)
- 定制admin
- 数据模型的继承(abstract、multi-table、proxy)
- 自定义数据模型字段
- 用Mixin为类视图添加额外功能
- 用formset处理多张表单
- 缓存的使用
- 用drf建立RESTful API
- 自定义中间件
- 部署上线
若是对以上内容都了然于胸的话,能够说是掌握django了。
固然,以上的全部内容用flask也均可以实现,只是方式不一样罢了:)
经常使用第三方库
- django-debug-toolbar:提供DEBUG信息,必备
- django-crispy-forms:美化表单
- django-extensions:各类扩展(shell、server等)
- django-taggit:提供简单的打标签功能
- django-braces:为类视图提供一系列Mixin
- django-embed-video:为页面嵌入视频
- djangorestframework:大名鼎鼎的drf,为django提供RESTful API支持
- django-xadmin:一个更强大的admin后台
- django-ckeditor:为表单提供富文本编辑器
- markdown:提供Markdown渲染支持
- pillow:图像处理
- sorl-thumbnail:缩略图生成
- redis:redis数据库的接口
- celery:分布式任务队列,用来任务调度
- flower:监控celery
- weasyprint:用HTML生成PDF文件