BLOG
Enjoy when you can, and endure when you must.
APR 07, 2016/Django
用 Django 构建简易博客(二):开启博客系统之旅

在我建立这个网站之初,我就发了一个系列的博客《Django 博客系统开发》,当时的想法是将自己所学和所实践的一些东西整理一下、记录下来。时至今日,三年的时光已在眨眼间过去,我发现这几篇文章在我网站的访问量排行中依然居高不下。说明这几年大家对 Python 和 Django 的关注度确实比较高并且有很多新的开发者加入其中,这当然要数是一个非常好的趋势。但技术是不断发展的,特别 Python 和 Django 都一直处于快速发展期,当年的文章中提到的方法很多已不再适用。因此萌发了做一个更新的想法,让更多的朋友关注最新的技术,而不是面对一个旧版冥思苦想。

本文一共分为五篇。本文为第二篇,主要关注 MTV 中的 M(模型)层。了解如何建立一个 Django Application、建立数据库模型并将表结构同步到实际的数据库中。最后还会简单演示一下如何利用 Django 的站点管理来帮助我们写入内容。

APR 03, 2016/Django
用 Django 构建简易博客(一):开始前的准备工作

在我建立这个网站之初,我就发了一个系列的博客《Django 博客系统开发》,当时的想法是将自己所学和所实践的一些东西整理一下、记录下来。时至今日,三年的时光已在眨眼间过去,我发现这几篇文章在我网站的访问量排行中依然居高不下。说明这几年大家对 Python 和 Django 的关注度确实比较高并且有很多新的开发者加入其中,这当然要数是一个非常好的趋势。但技术是不断发展的,特别 Python 和 Django 都一直处于快速发展期,当年的文章中提到的方法很多已不再适用。因此萌发了做一个更新的想法,让更多的朋友关注最新的技术,而不是面对一个旧版冥思苦想。

本文一共分为五篇。这一篇关注开始前的准备工作:基础环境、了解 Django 的 MVC 层并学会新建一个项目。

DEC 10, 2013/Django
InlineModelAdmin的魅力
如果经常使用Django Admin作为管理后台,那其中提供的InlineModelAdmin一定会经常凸显其魅力的。假如有这样的需求,我们接收来自用户的消息,并针对消息的内容做关键字匹配,然后再向用户返回特定的消息。那相关的模型可能如下:class Rule(models.Model):     ...     name = models.CharField(max_length=100)     msg = m...
NOV 21, 2013/Django
使用Grappelli提供的Related Lookups让GenericForeighKey在Admin中更好用
Django中的GenericForeignKey是个非常好的东西,可以方便的实现一个字段关联不同的外键。不过在Django Admin中,GenericForeignKey默认的使用效果很不方便,如下图所示,“响应消息类型”对应的是content_type,“关联消息”对应的是object_id。图中可以看出它不像普通ForeignKey那样可以实现快速查找。 不过很好的是Django-Grappelli中为我们提供了一个Related Lookups并且可以直接用在GenericForeignKey上。 Django...
NOV 15, 2013/Django
在ModelAdmin中自定义list_filter
list_filter可以对数据进行筛选,支持BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey或ManyToManyField。另外,还可以自定义!假设这里有一个Activity模型并为其增加一个自定义过滤器使其能够方便的筛选出“我参与的活动”、“我发布的活动”,我们可以这样做:class ActTypeFilter(SimpleListFilter):     title = u'类型'  &nb...
NOV 13, 2013/Django
在ModelAdmin中添加自定义View
为拓展ModelAdmin的功能,我们时常需要通过自定义View来进行拓展,通过利用ModelAdmin.get_urls(self)可以很方便的做到这一点。ModelAdmin中的get_urls方法返回该ModelAdmin中特定的URLs,其采用的方式和URLConf一样。由此,我们只需加入自己的View函数并通过get_urls方法加入URL链接即可达到目的。以下是我自己网站的一个示例:class PhotoAdmin(admin.ModelAdmin):     ......    &nbs...
1