Пользовательская функция-декоратор для представлений, которые изменили путь запроса - PullRequest
1 голос
/ 11 июля 2010

Может ли кто-нибудь показать мне, как я мог бы написать декоратор входа в систему, например @redirect_to_home, для моих представлений, чтобы он изменял переменную request.PATH на новое значение, такое как /, всякий раз, когда он применяется к представлению.

Я видел, как люди делали довольно сложные вещи с декораторами: я еще не разобрался с ними полностью.

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 июля 2010

Лучший способ начать - это понять декоратор входа в систему из проекта django (модуль auth): http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/decorators.py#L33

Если вы посмотрите на функцию "user_passes_test", вы увидите, как получить доступ к объекту запроса..

Хороший учебник о декораторах: http://www.ibm.com/developerworks/linux/library/l-cpdecor.html Некоторые примеры полезных декораторов см .: http://wiki.python.org/moin/PythonDecoratorLibrary

1 голос
/ 11 июля 2010

Спасибо Петру за полезные примеры.

def fake_requested_from_root(fn):
    """
    Login decorator which when used on a view modifies the reqquest.path
    to fool the template into thibking that the request is coming from the
    root page
    """
    def decorator(request, **kwargs):
        request.path = reverse('home')
        return fn(request, **kwargs)
    return decorator
...