Как перенаправить логин на разные страницы для разных пользователей в Django? - PullRequest
2 голосов
/ 10 июня 2019

Я работаю над проектом, который требует нескольких пользователей.Как я должен отправлять пользователей на разные страницы в зависимости от их роли?Вот код для моделей и просмотра, связанных с входом в систему.

models.py

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
Roles = (
    ('sales', 'SALES'),
    ('operations', 'OPERATIONS'),
    ('cashier', 'CASHIER'),
    ('frontdesk', 'FRONTDESK'),
    ('client', 'CLIENT'),

)


class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE,    default=None, null=True)
    role = models.CharField(max_length=50, choices=Roles, default='client')

    def __str__(self):
        return self.user.username

просмотр для входа в систему:

def user_login(request):
if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')

    user = authenticate(username = username , password = password)
    if user:
        if user.is_active:

             login(request, user)
             return HttpResponseRedirect(reverse('index'))
        else:
            return HttpResponse("ACCount not active!!")

    else:
        print("someone tried to login and falied!")
        print("Username : {} and Password : {}".format(username,password))
        return HttpResponse("Invalid credentials!")

else:
    return render(request , 'NewApp/login.html' , {})

1 Ответ

1 голос
/ 10 июня 2019

Вы можете сделать это, проверив значение роли и затем перенаправив к соответствующему представлению:

if user.is_active:
    login(request, user)
    if user.userprofile.role == 'sales':
        # sales users landing page
    elif user.userprofile.role == 'operations':
        # operations users landing page
        . . . . . 
    else:
        return HttpResponseRedirect(reverse('index'))
...