`
zuroc
  • 浏览: 1307881 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

django心得:url可以做的更多

阅读更多
辛辛苦苦,完善了一个url_decorate的django app,支持include,支持多个decorate的复合

代码在http://groups.google.com/group/python-cn/browse_thread/thread/6980d49316499e96

可以方便的在url中使用decorate,这里我演示了一个内建的登录,一个自定义的页面访问量的统计
如自定义的页面访问量的统计代码很简单,如下
models.py
from django.db import models
class PageAnalytic(models.Model):
    url = models.URLField(max_length=2048,primary_key=True)
    visit = models.IntegerField(default=0)

    class Admin:
        list_display= ('url','visit')

    class Meta:
        ordering = ['url']

views.py:

from models import PageAnalytic
from url_decorate import make_decorate

@make_decorate
def page_analytic(request):
    page,is_create=PageAnalytic.objects.get_or_create(url=request.path)
    page.visit+=1
    page.save()

shortcuts.py:

from url_decorate import url_decorate,patterns_decorate

from views import page_analytic

page_analytic_url=url_decorate(page_analytic)
page_analytic_patterns=patterns_decorate(page_analytic)

使用示例:

.................
from utils.url_decorate.shortcuts import
page_analytic_patterns,page_analytic_url

urlpatterns = patterns('',
    #统计页面访问量
    page_analytic_url(r'^admin/', include('django.contrib.admin.urls')),
    (r'^media/(?P .*)', 'django.views.static.serve',
{'document_root' : settings.MEDIA_ROOT, 'show_indexes':True}),
)

#更方便的形式
urlpatterns+=page_analytic_patterns('',
    (r'^$',direct_to_template, {'template': 'mytube.html'}),
)



Url decorator

Some time we want to account the number of visitor by url or some url
only the logined in user can visit .

Yes , we can use url decorator do this thing .

I write a reuseable app for simplify those job . It can make decorator
more easy , can work with "include(xxx.urls)",
support multi-decorator .

Ok , we give a simplest example:

from django.conf.urls.defaults import *
from django.contrib.admin.views.decorators import staff_member_required
from django.views.generic.simple import direct_to_template

from url_decorate.url_decorate import url_decorate

staff_member_url=url_decorate(staff_member_required)

urlpatterns = patterns('',
    staff_member_required(r'^$',direct_to_template, {'template': 'xxx.html'}),
)

Ok,You will find the / of this website require login in .
But , sometime we have a lot of url should be logined in ,
patterns_decorate will help you to do this more easy .
Just use as below:
staff_member_patterns=patterns_decorate(staff_member_required)
urlpatterns = staff_member_patterns('',
    (r'xxx',direct_to_template, {'template': 'xxx.html'}),
    (r'xxx',direct_to_template, {'template': 'xxx.html'}),
    (r'xxx',direct_to_template, {'template': 'xxx.html'}),
)

For lazy people as me , I write staff_member_patterns,staff_member_url
and login_url,login_patterns in shortcuts.py , just import it to use
:)

Then , let's write a decorator by ourself .This decorator can account
the number of visitor for each pages .

First , write a model

models.py:
#--------------------------------------------------------------------------<wbr></wbr>--
from django.db import models
class PageAnalytic(models.Model):
   url = models.URLField(max_length=2048,primary_key=True)
   visit = models.IntegerField(default=0)

   class Admin:
       list_display= ('url','visit')

   class Meta:
       ordering = ['url']
#--------------------------------------------------------------------------<wbr></wbr>--

Second , write the view . You just need to write a function can
process the request .
The other thing "make_decorate" can take it over .

views.py:
#--------------------------------------------------------------------------<wbr></wbr>--
from models import PageAnalytic
from url_decorate import make_decorate

@make_decorate
def page_analytic(request):
   page,is_create=PageAnalytic.objects.get_or_create(url=request.path)
   page.visit+=1
   page.save()
#--------------------------------------------------------------------------<wbr></wbr>--

At last , write two shortcuts

shortcuts.py:
#--------------------------------------------------------------------------<wbr></wbr>--
from url_decorate import url_decorate,patterns_decorate
from views import page_analytic

page_analytic_url=url_decorate(page_analytic)
page_analytic_patterns=patterns_decorate(page_analytic)
#--------------------------------------------------------------------------<wbr></wbr>--

Now , It's time to use this , we just accout the admin .

#--------------------------------------------------------------------------<wbr></wbr>--
from url_decorate.shortcuts import page_analytic_url

urlpatterns = patterns('',
   page_analytic_url(r'^admin/', include('django.contrib.admin.urls')),
)
分享到:
评论

相关推荐

    Python中django学习心得

    ### Python中Django学习心得详解 #### 一、概述 本文档主要介绍Python中的Django Web应用框架的一些关键概念和技巧。Django是一款基于Python语言的开源Web开发框架,它遵循MVC(Model-View-Controller)设计模式,...

    主博客网站

    【标题】"主博客网站"通常指的是一个个人或组织用于发布技术文章、心得分享或行业动态的在线平台。这样的网站可以是自建的,也可以基于现有的博客服务...深入研究源代码,我们可以了解到更多关于项目的设计和实现细节。

    简易博客、系统、小系统、web开发

    【简易博客系统】是一个专为编程爱好者设计的初级博客平台,旨在提供一个...同时,对于有经验的开发者,也可以在此基础上进行二次开发,实现更多高级功能,比如SEO优化、多用户协作、文章分类等,进一步提升用户体验。

    宠物用品交易网站.zip

    现代前端框架如React、Vue.js或Angular可以提高开发效率并提供更好的用户体验。 2. **后端开发**:后端处理数据存储、业务逻辑和服务器通信。常见的后端技术有Node.js、Python的Django或Flask框架、Java的Spring ...

    国内最优秀商品评论网站系统

    作为一个独立开发的板块,论坛提供了用户交流的平台,用户可以就某一商品或相关话题展开深入讨论,提出疑问,分享心得,形成丰富的互动社区。论坛的设置增强了用户粘性,也提升了网站的活跃度。 从技术实现角度,...

    eduardo-blog:我的项目的个人博客

    【标题】"eduardo-blog:我的项目的个人博客...通过分析这个标题和描述,我们可以了解到这是一项使用Python开发的个人博客项目,涵盖了Web开发的多个层面,包括后端逻辑、数据库交互、前端展示以及部署与运维等知识。

    Cook-Book:简单的MVC应用程序可跟踪和共享我们的食谱

    【标题解析】 "Cook-Book:简单的MVC应用程序可跟踪和共享...综上所述,这个"简单MVC食谱应用"涵盖了从后端开发到前端交互,从数据管理到用户社交互动的多个层面,是一个综合性的项目,可以深入学习和实践多种IT技能。

    blog:blog源码​​仓库

    7. **SEO优化**:为了让博客更容易被搜索引擎发现,源码可能包含了SEO(搜索引擎优化)的最佳实践,如元标签、友好的URL结构和Sitemap等。 8. **安全考虑**:考虑到用户登录和个人数据,博客源码可能包含了安全措施...

    community_cookbook:社区食谱手册库

    同时,考虑到SEO优化,可以使用合适的元标记和URL结构,使搜索引擎能更好地索引和展示社区食谱手册库的内容。 总之,社区食谱手册库项目涵盖了前端开发、后端开发、数据库管理和Web服务集成等多个方面,通过HTML等...

    lisabeth22Tspu.github.io

    标题 "lisabeth22Tspu.github.io" 暗示这是一个个人或项目的GitHub Pages网站。GitHub Pages是GitHub提供的一项服务,用户可以免费托管...通过对压缩包内的文件进行解压和分析,可以更深入地了解这个网站的结构和内容。

Global site tag (gtag.js) - Google Analytics