2017-06-12 115 views
0

我在我的Django应用程序Admin,Staff和Parent中有三种类型的人。我如何为他们设置登录,因为他们在使用django注册登录后会有不同的视图? 到目前为止我的代码是这样的: settings.py中在django中登录后创建用户特定的重定向

LOGIN_REDIRECT_URL = '/app/login_redirect' 
LOGIN_URL = '/app/accounts/login/' 
LOGOUT_URL = '/app/accounts/logout/' 

和views.py:

def login_redirect(request): 
    if request.user.is_authenticated() and not request.user.is_superuser: 
     return HttpResponseRedirect(reverse("dashboard")) 
    elif request.user.is_superuser: 
     return HttpResponseRedirect(reverse("dashboard")) 

我想找出哪些用户登录?我的意思是它是一个工作人员用户或父母用户或管理员? model.py

class Student(BaseModel): 
    user = models.ForeignKey("auth.User",blank=True,null=True,related_name="user_%(class)s_objects") 
    student_name = models.CharField(max_length=128) 
    admission_number = models.CharField(max_length=128,null=True,blank=True) 
    transportation_needs = models.CharField(max_length=128, choices=TRANSPORTATION_NEEDS,blank=True,null=True) 
    extended_care_need = models.CharField(max_length=128, choices=EXTENDED_CARE_NEED,blank=True,null=True) 
    nationality = CountryField (blank_label='------(select Your Country)-------',max_length=128,blank=True,null=True) 
    date_of_birth = models.DateField() 
    permanent_address = models.CharField(max_length=128,blank=True,null=True) 
    address_for_communication = models.CharField(max_length=128,blank=True,null=True) 
    gender = models.CharField(max_length=128, choices=GENDER_CHOICE) 
+0

你到目前为止尝试过什么?显示一些代码或至少详细说明情景位更详细... – zaidfazil

+0

我更新了问题 –

+0

如何区分父用户,是否有字段'is_parent'? – zaidfazil

回答

1

可以实现的另一种方式是添加组。创建组对象(名称分别为“partent”,“student”,“teacher”),并将相应的用户添加到该组。通过这种方式,您不必重写/更改auth.User模型。

def login_redirect(request): 
    if request.user.is_authenticated(): 
     user_groups = request.user.groups.values_list('name', flat=True)  
     if request.user.is_superuser: 
      return HttpResponseRedirect(reverse("admin")) 
     elif "parent" in user_groups: 
      return HttpResponseRedirect(reverse("parent_dashboard")) 
     elif "student" in user_groups: 
      return HttpResponseRedirect(reverse("student_dashboard")) 

希望这会有所帮助。