django--视图函数的包装(Wrapping view function)

来源:互联网 发布:王思丽事件知乎 编辑:程序博客网 时间:2024/06/03 20:03

下边的代码包含很多重复的代码:

def my_view1(request):    if not request.user.is_authenticated():        return HttpResponseRedirect('/accounts/login/')    # ...    return render_to_response('template1.html')def my_view2(request):    if not request.user.is_authenticated():        return HttpResponseRedirect('/accounts/login/')    # ...    return render_to_response('template2.html')def my_view3(request):    if not request.user.is_authenticated():        return HttpResponseRedirect('/accounts/login/')    # ...    return render_to_response('template3.html')

每个视图都要检查用户是否已经认证,未认证会被重定向到/accounts/login/,我们可以这样:

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

这样就可以在URLconf中直接使用requires_login来包装实现:

from django.conf.urls.defaults import *from mysite.views import requires_login, my_view1, my_view2, my_view3urlpatterns = patterns('',    (r'^view1/$', requires_login(my_view1)),    (r'^view2/$', requires_login(my_view2)),    (r'^view3/$', requires_login(my_view3)),)


0 0
原创粉丝点击