Обертывание / декорирование функции в urls.py vs in views.py

Итак, я хорошо знаком с функциями обертывания в views.py. Так что я' мы написали декоратор для перенаправления на REDIRECT_URL по умолчанию, если пользователь находится в системе (своего рода обратный login_required ); он основан на том, как я делал представления в прошлом:

def not_logged_in(redirect_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
    def decorator(view_func, *args, **kwargs):
        def wrapper(request, *args, **kwargs):
            if not request.user.is_authenticated():
                return view_func(*args, **kwargs)
            else:
                redirect_url = (request.REQUEST.get(redirect_field_name, redirect_url) or
                                settings.REDIRECT_URL)
                return HttpResponseRedirect(redirect_url)
        return wrapper
    return decorator

Однако я получаю следующую ошибку: объект 'function' не имеет атрибута 'status_code' , что вызвано средним программным обеспечением, ожидающим HttpResponse. Когда я смотрю на значение для ответа , я вижу, что это <оболочка функции в 0x2b3a9922a500> .

Вот как я называю это в urls.py :

url(r'login/', 
     not_logged_in(auth_views.login), 
     {'authentication_form': LoginForm },
),
6
задан Jordan Reiter 26 April 2011 в 21:51
поделиться