<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    stone2083

    django框架的幾個(gè)擴(kuò)展點(diǎn)

    前段時(shí)間替朋友做了一個(gè)物業(yè)管理系統(tǒng),使用了python+django技術(shù),對(duì)django有了一些了解。
    作為一個(gè)一直來(lái)使用java的人來(lái)說(shuō),初次使用django,真正體會(huì)到了簡(jiǎn)單美學(xué)。(一共13個(gè)功能,不到500行代碼)
    此文,主要總結(jié)下django框架的一些擴(kuò)展點(diǎn):
    MIDDLEWARE_CLASSES
    在request請(qǐng)求之前,或者response請(qǐng)求之后,做攔截,允許自定義邏輯。有些類(lèi)似J2EE Servlet中的Filter概念。
    TEMPLATE_CONTEXT_PROCESSORS
    進(jìn)入模板渲染之前,允許放入一組用于模板渲染的Key-Value屬性。
    TEMPLATE FILTER
    模板中的管道語(yǔ)法,通過(guò)自定義行為,添加用于顯示的一些邏輯。
    TEMPLATE TAG
    模板tag,添加一組行為。有些類(lèi)似Velocity中的ToolSet功能。
    模板tag+指定模板,充當(dāng)頁(yè)面組件(widgets)功能

    middleware演示
     1 from django.db import connection
     2 from django.http import HttpResponseRedirect
     3 
     4 #攔截response請(qǐng)求之后,打印請(qǐng)求中的所有sql
     5 class SqlLogMiddleware(object):
     6     def process_response(self, req, res):
     7         for sql in connection.queries:
     8             print sql
     9         return res
    10 
    11 #攔截request請(qǐng)求之前,做權(quán)限校驗(yàn)
    12 class Auth(object):
    13     def process_request(self, req):
    14         if req.path == '/admin/':
    15             return
    16         if not req.user.is_authenticated():
    17             return HttpResponseRedirect('/admin/')
    18 
    1 MIDDLEWARE_CLASSES = (
    2     'django.middleware.common.CommonMiddleware',
    3     'django.contrib.sessions.middleware.SessionMiddleware',
    4     'django.contrib.auth.middleware.AuthenticationMiddleware',
    5     'finance.middleware.SqlLogMiddleware',
    6     'finance.middleware.Auth',
    7 )


    template context processor演示
    1 def version(request):
    2     return {'name':'Stone.J',
    3             'version':'1.0-beata',
    4             'date':'2011-03-20'}
    1 TEMPLATE_CONTEXT_PROCESSORS = (
    2     'django.core.context_processors.request',
    3     'django.core.context_processors.auth',
    4     'django.core.context_processors.debug',
    5     'django.core.context_processors.i18n',
    6     'django.core.context_processors.media',
    7     'finance.example.context_processors.version',
    8 )

    template filter演示
     1 def row(value):
     2     if not value:
     3         return 'row1'
     4     if value % 2 == 1:
     5         return 'row1'
     6     else:
     7         return 'row2'
     8     
     9 def math_mul(value, num):
    10     return value * num
    11 
    12 def math_add(value, num):
    13     return value + num
    14 
    15 register = template.Library()    
    16 register.filter('row', row)
    17 register.filter('math_add', math_add)
    18 register.filter('math_mul', math_mul)
    1 {% load my_filter %}
    2 {% for c in page.object_list %}
    3 <tr class="{{ forloop.counter|row }}">
    4 <td>{{ c.amount | math_add:c.amount2}}</td>
    5 <td>{{ c.amount | math_mul:12}}</td>
    6 </tr>
    7 {% endfor %}
    通過(guò)約定的方式,在任意一個(gè)app下,建立一個(gè)templatetags目錄,會(huì)自動(dòng)尋找到。(不過(guò)沒(méi)有命名空間,是一個(gè)比較猥瑣的事情,容易造成不同app下的沖突)

    template tag演示
     1 register = template.Library()
     2 
     3 class AccountNode(template.Node):
     4     def __init__(self, name):
     5         self.name = name
     6         
     7     def render(self, context):
     8         context[self.name] = Account.objects.get()
     9         return ''
    10     
    11 def get_account(parser, token):
    12     try:
    13         tag_name, name = token.split_contents()
    14     except ValueError:        
    15         raise template.TemplateSyntaxError, "%s tag requires argument" % tag_name
    16     return AccountNode(name)
    17 
    18 register.tag('get_account', get_account)

    1 {% load my_tag %}
    2 {% get_account account %}<!-- 通過(guò)tag取到內(nèi)容賦值給account變量 -->
    3 {{ account.amount }}

    template tag + template file演示
    1 from django import template
    2 register = template.Library()
    3 
    4 def version(context):
    5     return {'name':'Stone.J',
    6             'version':'1.0-beata',
    7             'date':'2011-03-20'}
    8 
    9 register.inclusion_tag('example/version.html', takes_context=True)(version)
    1 <!-- 這份內(nèi)容可以被當(dāng)成widget復(fù)用 -->
    2 <table>
    3     <tr>
    4         <td>{{ name }}</td>
    5         <td>{{ version }}</td>
    6         <td>{{ data }}</td>
    7     </tr>
    8 </table>
    9 
    tag尋找模式等同于filter。

    posted on 2011-04-20 22:54 stone2083 閱讀(2574) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): python

    主站蜘蛛池模板: 美女视频黄的免费视频网页| 亚洲色自偷自拍另类小说| 久久黄色免费网站| 国产成人高清亚洲一区91| 亚洲午夜电影一区二区三区| a级毛片黄免费a级毛片| 亚洲国产无线乱码在线观看 | 亚洲综合另类小说色区| 免费无遮挡无码视频网站| 国产精品免费精品自在线观看| 日韩在线一区二区三区免费视频 | 在线观看H网址免费入口| 成全动漫视频在线观看免费高清版下载| 亚洲欧美日韩中文二区| 亚洲国产精品乱码在线观看97| 亚洲乱码国产乱码精品精| av在线亚洲欧洲日产一区二区| 成人毛片18岁女人毛片免费看| 美丽姑娘免费观看在线观看中文版| 一级毛片a女人刺激视频免费| 亚洲精品乱码久久久久久蜜桃图片| 亚洲黄色网址大全| 亚洲今日精彩视频| 亚洲AV福利天堂一区二区三| 超清首页国产亚洲丝袜| 久久青青草原亚洲av无码| 亚洲精品国产精品国自产观看| 最新69国产成人精品免费视频动漫 | 免费人成视网站在线观看不卡| 99久久精品免费视频| 日韩在线永久免费播放| 最刺激黄a大片免费网站| 99re免费视频| 亚洲最大免费视频网| 国产高清免费视频| 免费H网站在线观看的| 蜜桃视频在线观看免费网址入口| 精品免费人成视频app| 日本成年免费网站| 夭天干天天做天天免费看| 日韩特黄特色大片免费视频|