在 django 中登录后创建用户特定的重定向

Create User-Specific Redirect After Login in django

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

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)

实现此目的的另一种方法是添加组。创建组对象(名称为 "partent"、"student"、"teacher")并将相应的用户添加到该组。通过这种方式,您不必 override/change 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"))

希望对您有所帮助。