用于Django视图的Python装饰器:检查UserProfile中的特定设置

时间:2010-12-09 20:42:12

标签: python django authentication login decorator

我想编写一个装饰器,用于我网站上的所有视图,首先检查登录用户的UserProfile是否具有特定设置。在我的例子中,它是user.get_profile.user_status,值可以是“过期”或“活动”。如果user_status =“已过期”,我想将其重定向到结算帐户更新页面。如果他们活跃,他们可以通过。

我希望成为@must_be_active@paywall_check

之前从未写过装饰。关于如何最好地开始的想法?

2 个答案:

答案 0 :(得分:3)

首先,请阅读此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

答案 1 :(得分:0)