Python decorator для представлений Django: проверьте наличие определенного параметра в UserProfile - PullRequest
0 голосов
/ 09 декабря 2010

Я хотел бы написать декоратор для использования в представлениях по всему сайту, чтобы сначала проверить, имеет ли пользовательский профиль вошедшего в систему пользователя определенный параметр. В моем случае это user.get_profile.user_status, и значение может быть «просрочено» или «активно». Если user_status = "expired", я хочу перенаправить их на страницу обновления платежного аккаунта. Если они активны, они могут пройти.

Я бы хотел быть чем-то вроде @must_be_active или @paywall_check.

Никогда раньше не писал декоратор. Идеи о том, как лучше начать?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Сначала прочитайте это http://docs.djangoproject.com/en/1.2/topics/auth/#limiting-access-to-logged-in-users-that-pass-a-test

На самом деле проще, если вы не пишете декоратор.

from django.contrib.auth.decorators import user_passes_test

def must_be_active( user ):
    if .... whatever .... 

def paywall_check( user ):
    if .... whatever .... 

@user_passes_test(must_be_active)
def my_view(request):
    do the work

@user_pass_test(paywall_check)
def another_view(request):
    do the work
0 голосов
/ 09 декабря 2010

Короткий прямой пример

http://www.djangofoo.com/tag/custom-decorator

...