Create User-Specific Redirect After Login in django

 ̄綄美尐妖づ 提交于 2019-12-14 04:12:01

问题


I have three types of people in my Django application Admin, Staff and Parent . how can I set up log-in for them as they will have different views after logging in using django registration? my code so far is this : in settings.py

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

and in 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"))

I want to identify the which user is logged in ? I mean is it a staff user or a parent user or a admin? 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)

回答1:


Another way this can be achieved is by adding groups. Create group objects(with names as "partent", "student", "teacher") and add respective users to that group. By this way you dont have to override/change auth.User model.

 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"))

Hope this helps.



来源:https://stackoverflow.com/questions/44492856/create-user-specific-redirect-after-login-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!