Pinax源代码分析16 – 总结

Pinax源代码分析16 – 总结

前一阵读了Pinax的源代码,尽管大多数地方都是浅尝辄止,但是第一次这么认真地读一个开源项目的代码,感觉收益还是不少。对这些天的收获,以及对Pinax学习的一个总结。

PinaxDjango的应用

Pinax 几乎用到了Django的所有功能。比如国际化i18n,类似触发器的signals,大量的自定义标签、context_processorsmiddlewaregeneric view等等等等。

模板

Pinax全站的模板都继承自site_base.html。这样,如果要去掉或者添加某一个app,只要修改site_base.html就可以了。总体来讲,site_base.html属于“功能性模板”。

 

site_base.html继承自base.html。它定义了HTML文档的大致结构与布局。如果想要修改站点的整体布局或者是具体风格,应该修改这个模板以及它包含的CSS

 

大多数app自己的模板文目录中都会包含一个base.html,区别于全站的html,这个模板负责提供子导航栏和侧边栏。通过让app内的其它模板继承这个模板,也可以做到在修改的时候只需修改一个模板就可以了。

中文化

Pinax大量应用了slug,不知道除了程序员和搞SEO的之外会不会有中国人熟悉这东西。所以单纯地将Pinax翻译过来似乎仍然不太符合中国人的使用习惯。

tweets这种app应该直接被枪毙。

此外,Pinax自带一个blog应用,但是支持的集中编码都是我原来没听说过的,估计用户每几个知道的。

用户体验

不知道是不是复用第三方apps复用多了,感觉整个网站用起来不像一个整体,有些地方的用户体验比较糟糕。例如Inbox的设计,Inbox下设多个子栏目(邮件、消息和提醒等等),无论有消息和提醒,Inbox后面都会多出一个数字提醒。但是无论如何,想看到新收到的提醒都必须点击两次。

 

 

 

印象最深刻的app —— app_plugins

实际上不像是一个传统的app,而是借用app的形式扩展了Django,进一步促进了apps之间的分离。实际实现的功能类似于反向的{% block %},它允许一个app定义自己希望被其它的app定义的内容。

举例,app A 可以定义一个 foo.html模板,意为:“我的foo部分可以被其它app包含。”同时app B, C…Z 也定义一个foo.html。任意appindex都可以通过

{% plugin_point "foo " …… %}来包含进搜有app规定的foo.html的内容。但是indexAZ任意一个app都没有依赖性,可以任意的删除一个app,而不需要对代码做出任何修改。

Pinax对第三方Apps的应用

个人感觉Pinax 对第三方应用的使用已经到了极致。这一段是个人复习用的总结,而且会比较长,所以放在最后:

INSTALLED_APPS = (

    # included

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.sites',

    'django.contrib.humanize',

    'django.contrib.markup',

    #---------------------------------------以上一段都是Django自带的。

# external

# external包括第三方的app以及Pinax中可以独立拿出来嵌入其它项目的app

    'notification', # must be first 发送Email提醒,在网站上的提醒

    'django_openid', #支持openid登录

    'emailconfirmation', #管理用户的邮箱,并且负责发送确认信。

    'django_extensions',

    'robots', #管理robots.txt

    'dbtemplates',

    'friends', #提供部分好友功能

    'mailer', #发送邮件

    'messages', #站内邮系统。收件箱、发件箱

    'announcements', #通知

    'oembed', #嵌入维基、视频和图片等内容或媒体

    'djangodblog',

    'pagination', #分页

#    'gravatar',

    'threadedcomments', #实现对物体的评论以及tribes里的讨论话题。

    'wiki', #维基,嵌入tribesapps

    #'swaps', #用户见交易的平台

    'timezones',#时区支持功能

    'app_plugins',#一种app之间包含的机制

    'voting',#通用的投票功能

    'tagging',#提供标签域,以及常用的标签功能。

    'bookmarks',#书签

    'blog',#博客

    'ajax_validation', #ajax方式验证表单,通用app

    'photologue',#管理照片,添加了一个供其它Model继承的抽象类,从而添加了许多图片相关的功能。

    'avatar',#用户头像

    'flag',#举报

    'microblogging',#微博客,可以与twitter实现基本的同步

    'locations',#一个“签到”的功能,基于Yahoo Map,没有我从名字想象的那么强大。

    'uni_form',#将表单以统一的形式,以div布局显示出来。

   

# internal (for now)

#internal里的app部分在项目中供完全自定义

#另一部分在Pinaxegg里。

    'analytics',#嵌入google统计代码

    'profiles',#用户档案

    'staticfiles',#将所有的媒体文件都复制到一处,并且负责提供静态文档。进攻测试。

    'account',#用户账号

    'tribes',#小组

    'projects',#项目(其实就是带任务的小组)

    'misc',#大量供其它apps使用的自定义标签和中间件

    'photos',#图片

    'tag_app',#标签

 

    'django.contrib.admin',#Django自带的admin

)

遗漏的apps

发现还有几个没读到的app,包括:

    'django_extensions',

    'dbtemplates',

    'djangodblog',

 

准备进军Satchmo

 

你可能感兴趣的:(Django,Pinax,pyryday)