django高级视图和URL配置

#URL配置

#
-*-coding:utf-8-*- from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() """ 整个框架关注的是:是否存在一个名为urlpatterns模块级别的变量 故而只要增加多个patterns对象即可,从而实现使用多个视图前缀,对视图模块进行分类管理维护 """ urlpatterns = patterns('mysite.views', # 我们把hello视图函数当作对象处理,而不是调用它,这是python的一个重要特性,函数是一级对象(first-class objects) url(r'^hello/$', 'hello'), url(r'^currentdate/$', 'current_datetime'), url(r'time/\d{1,2}/$', 'current_datetime'), # 正则表达式利用括号从文本中提取数据,传入到视图函数 url(r'time/(\d{1,3})/$', 'time'), url(r'^render/$', 'render_template'), url(r'^accessDb/$', 'accessDb') ) urlpatterns += patterns('', url(r'^admin/', include(admin.site.urls))) urlpatterns += patterns('mysite.books.views', url(r'^meta1/', 'request_meta'), url(r'^meta2/', 'request_meta_2'), # url(r'^search_form/', search_form), url(r'^search/', 'search') ) urlpatterns += patterns('mysite.contact.views', url(r'^contact/', 'contact2') )

 命名组URL配置实例(通过该方式可以以“关键字”方式传参到视图函数):

 python函数传参方式:位置参数&关键字参数

def year_archive(request, year, month, day):
    """
    命名组语法:(?P<name>p)
    url(r'^year_archive/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$', 'year_archive')
    """
    return HttpResponse('Now is %s-%s-%s' % (year, month, day))

URL短路逻辑:

#如果请求同时匹配多种模式,优先使用最顶层匹配到的视图函数

urlpatterns = patterns('', # ... ('^auth/user/add/$', views.user_add_stage), ('^([^/]+)/([^/]+)/add/$', views.add_stage), # ... )

 视图包装:

urlpatterns += patterns('',
                        url(r'^view1/', requires_login(my_view1)),
                        url(r'^view2/', requires_login(my_view2))
                        )
def my_view1(request):
    return render_to_response('template1.html')


def my_view2(request):
    return render_to_response('template2.html')


def requires_login(view):
    def new_view(request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/accounts/login/')
        return view(request, *args, **kwargs)
    return new_view

 URL之include示例:

 

备注:捕获的参数(命名组传参)& 额外的URLconf如何与include()协同工作?

这些参数将传递给被包含的URLconf的每一行,

posted @ 2016-10-06 02:20  神圣兽国窝窝乡独行侠  阅读(158)  评论(4编辑  收藏  举报