Как иметь несколько типов пользователей в django
это приложение представляет собой систему управления школой с помощью django
У меня есть три типа пользователей в моем веб-приложении, моя проблема в том, как авторизовать их и дать им разрешения.
пользователями являются: учитель, ученик, персонал школы (администраторы)
мне нужно иметь разные страницы (приложения) для каждого из них, например:
учитель -> login -> teacher_app.
student -> login -> student_app.
я новичок в django
мои модели выглядят примерно так:
class Student(models.Model) :
national_id = models.CharField(
max_length=50,
unique=True,
)
name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
phone_number = models.CharField(max_length=50)
class Teacher(models.Model) :
personal_id = models.CharField(
max_length=50,
unique=True,
)
name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
phone_number = models.CharField(
max_length=50,
unique=True,
)
email = models.EmailField(
max_length=250,
unique=True,
)
class Class(models.Model):
name = models.CharField(max_length=50)
start_time = models.TimeField(
auto_now=False,
auto_now_add=False,
default=DEFAULT_START_TIME,
)
end_time = models.TimeField(
auto_now=False,
auto_now_add=False,
default=DEFAULT_END_TIME,
)
# Relations
teacher = models.ForeignKey(
Teacher,
on_delete=models.CASCADE
)
students = models.ManyToManyField(Student)
администраторы будут создавать классы и добавлять учеников и учителей.
В Django есть Roles и Groups для классификации пользователей. Что разрешено и запрещено, контролируется Permissions. Каждый Пользователь, Роль и Группа могут иметь различные специфичные для модели и специфичные для представления Разрешения. Система довольно сложна и допускает множество различных настроек. Я бы посоветовал вам ознакомиться с обзором, таким как этот.
Лучше обрабатывать это с помощью поля (а не с помощью 2 разных моделей), например, вы можете иметь что-то вроде этого:
class User(models.Model) :
# NEW
ROLES = (('student', 'Student'), ('teacher', 'Teacher'))
role = models.CharField(
max_length=20,
choices=ROLES,
default='student'
)
national_id = models.CharField(
max_length=50,
unique=True,
)
name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
phone_number = models.CharField(max_length=50)
Также можно использовать модель разрешений Django подробнее