2017-04-04 27 views
0

后,我有3种类型的用户在我的models.py考虑使用自定义权限登录的Django

class Customer(models.model) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘Customer’) 

class ClientTypeA(models.model) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘ClientA’) 

class ClientTypeB(models.model) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘ClientB’) 

我使用权限在我的基础模板来呈现相关侧边栏,但现在我还结合每个用户的特定仪表板以及侧边栏,所以我发现为每个用户类型创建主页视图会更简单。

一旦我登录用户在其其重定向到我家视图 - 所以我在views.py想出了这个

def home(request): 

    if request.user.is_customer: 
     return redirect(customer_home) 

    elif request.user.is_clientA: 
     return redirect(clientA_home) 

    elif request.user.is_clientB: 
     return redirect(clientB_home) 

    else: 
     return render(request, 'home.html') 

调用的重定向将简单地把他们带到有相应的主页。

  1. 我知道我的is_customer,is_clientA,is_clientB不会自动来使用Django,如何和我在哪里添加这些自定义的权限?我的models.py?为了简单检查,我将它们设置为什么等于活动的用户类型?我甚至需要自定义权限还是有更简单的方法来调用用户类型?

  2. 我用于很多if语句吗? (我试图保持它的简单和快速)

回答

1

由于所有的型号都有一个对一个字段到User模型,你可以使用has_attr检查用户是否具有行为模型。您不必创建权限。

if hasattr(request.user, 'customer'): 
    return redirect('customer_home') 

如果您只有三种客户类型,那么if/elif/else可能没问题。随着数量的增加,您可以将其更改为如下所示的内容。

customer_types = [ 
    ('customer', 'customer_home'), 
    ('clienttypea', 'ClientA_home'), 
    ... 
] 

for field_name, redirect_url in customer_types: 
    if hasattr(request.user, field_name): 
     return redirect(redirect_url) 
# fallback 
return render(request, 'home.html')