Проблема перенаправления пользовательского декоратора Django - PullRequest
3 голосов
/ 29 июля 2011

Я пытаюсь написать собственный декоратор в Django.Я хочу перенаправить пользователей на пользовательскую страницу входа, если они не вошли через эту страницу.Я написал декоратор и отладил его.Хотя он работает хорошо, если пользователь не вошел в систему, после входа в систему он выдает ошибку как

The view APPNAME.views.home didn't return an HttpResponse object.

. Мой код приведен ниже.Почему мой декоратор просто переходит в раздел return wraps(func)(inner_decorator) после аутентификации на приватной альфа-странице?

Спасибо

def private_alfa_required():    
def decorator(func):
    def inner_decorator(request,*args, **kwargs):
        if 'isPrivateAlfaUser' not in request.session or request.session['isPrivateAlfaUser'] != True:
            return render_to_response('homepage.html') 

    return wraps(func)(inner_decorator)

return decorator

@private_alfa_required()
def home(request):
 .....



def home2(request):
  .....

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Потому что вы на самом деле не вызывали функцию просмотра, если ваш тест прошел успешно.

if 'isPrivateAlfaUser' not in request.session or request.session['isPrivateAlfaUser'] != True:
    return render_to_response('homepage.html') 
else:
    return func(request, *args, **kwargs)

В качестве вторичного замечания вам не нужен внешний уровень оболочки, потому что ваш декоратор не принимает никаких аргументов. Если вы отбросите это, вам также нужно сбросить () на самом декораторе.

0 голосов
/ 29 июля 2011

вам нужно передать контекст для рендеринга в ответ

return render_to_response('homepage.html', context_instance=RequestContext(request))

или рендеринг в ответ не будет работать

...