Pinax源代码分析1

Pinax源代码分析1

分析account package

1 models.py

models.py定义的是数据库模型。除此之外,该文件还使用了其它的一些功能:

国际化(i18n)

setting文件里的USE_I18N = False/True控制了是否使用国际化功能。
account
模块使用ugettext_lazy
from django.utils.translation import ugettext_lazy as _
在需要的翻译的字符串上应用_()函数就可以了。
_('user')
当字符串中有多于一个placeholder的时候必须使用命名方式的替换,而不是位置方式。

标记了要翻译的字符串之后,需要创建翻译文件:在项目根文件夹运行:
django-admin.py makemessages -l de
默认只扫描html的文档,可以通过-e参数修改包括的后缀。

修改声称的.po文件,其中的msgstr就是翻译字符串。需要注意将po文件的编码调整为utf-8。
翻译完成之后运行:

django-admin.py compilemessages

主要参考:Internationalization


信号

models 使用了 post_save 信号。

from django.db.models.signals import post_save

def create_account(sender, instance=None, **kwargs):
    if instance is None:
        return
    account, created = Account.objects.get_or_create(user=instance)

post_save.connect(create_account, sender=User)


最后一句表示,当User对象保存之后就调用create_account函数,这里该函数会试图给user创建一个account

主要参考:Signals

2 urls.pyviews.pyforms.py

urls定义了如何将各个url映射到对应的view上,views则定义了实际处理request的逻辑。
urls中,每个url都包含一个name参数。例如:
    url(r'^email/$', 'account.views.email', name="acct_email"),
这个name可以用于django.core.urlresolvers.reverse使用。

每个view都有一个form_classtemplate_name参数。不知道为什么要将用到的表单和模板以参数的形式传递给view函数。

forms
定义了要使用的表单类。

3 templatetags

Django支持自定义标签和过滤器。
account目录下包含一个templatetags子目录,里面有openid_tags.pyother_service_tags.py两个文件定义了自定义的标签,使用的时候需要在模板中现载入标签:
{% load openid_tags %}

open_id.py使用


register = template.Library()
register.simple_tag(openid_icon)


来注册了一个自定义标签。
other_service_tags.py


@register.tag(name='other_service')
def other_service_tag(parser, token)
……

这个标签返回的是一个Node

class OtherServiceNode(template.Node):
    ……
    def render(self, context):
        ……



4 admin.py

admin.pymodels注册到admin的管理之下。
文档:Admin site | Admin actions



5 context_processors.py

context_processors.py中是用户自定的context_processors。一个context_processor接受一个参数——request,返回一个字典。字典将被添加到模板的context中。
使用之前,在settings中需要激活:

TEMPLATE_CONTEXT_PROCESSORS = (
    ……
    "account.context_processors.openid",
    "account.context_processors.account",
    ……
)


参考: Template API

6 middleware.py

一个middleware是定义了几个特定方法的类。accoutLocaleMiddleware定义了process_requestprocess_response方法。它根据用户的语言设置来决定响应的语言。使用之前需要在settings中激活:

MIDDLEWARE_CLASSES = (
    ……
    'account.middleware.LocaleMiddleware',
    ……
)


参考:Middleware: Overview

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值