2016-03-22 3 views
1

ich mit dem Schema-Erstellung stecke so könnten Sie mir eine Idee liefern dieses Szenario zu implementierenerstellen DB-Tabellen mit verschiedenen Benutzertypen und authentifizieren Benutzer mit Benutzernamen und Passwort

habe ich 4 Arten von Benutzern Schüler, Lehrer, Elternteil und Admin

ich habe versucht, 4 Tabellen für Benutzername, Passwort und Token für jeden Benutzer und eine Tabelle zu erstellen, aber ich bin nicht in der Lage diese Tabelle an die Nutzer zu beziehen, weil mehr als ein Benutzer nicht denselben Benutzernamen haben

Was ich will ist, muss ich jeden Benutzer mit ihrem Benutzernamen und Passwort und der Student ta authentifizieren ble könnte Beziehung mit Elterntisch haben !!!!

so während der Authentifizierung Ich muss wissen, welche Art von Benutzer er/sie ist

ich bin mit Python Django 1.9

+0

wenn hilfreich wäre, wenn Sie zeigen können, was Sie getan haben =) – cctan

Antwort

1

Statt vier separaten Tabellen zu erstellen, können Sie einfach ein Feld hinzufügen, die das widerspiegeln user_type des Benutzers.

class CustomUser(AbstractBaseUser): 

    ... 
    [other model fields] 
    ... 

    USER_TYPE_CHOICES = (
     ('student', 'Student'), 
     ('teacher', 'Teacher'), 
     ('parent', 'Parent'), 
     ('admin', 'Admin'), 
    ) 

    user_type = models.CharField(choices=USER_TYPE_CHOICES, max_length=7) 

Dadurch haben alle Benutzer eindeutige Benutzernamen und sie werden einfach zu verwalten.

Sie können Art der Benutzer überprüfen nur durch seine user_type zugreifen, wird es eines dieser Text Werte zurückgeben „Schüler, Lehrer, Eltern und Admin“. So können Sie Geschäftslogik für verschiedene Benutzertypen verarbeiten.

+0

Also kann ich Beziehung zwischen Elternbenutzer und Student Benutzer auch implementieren? und der Lehrerbenutzer könnte mehr Felder haben, also kann ich es als optionale Felder im Benutzermodell hinzufügen? –

+0

Ja, Sie können. Sie können optionale Felder je nach Benutzertyp hinzufügen. Ich würde vorschlagen, etwas wie "Profil" -Modell zu erstellen, so dass das "Benutzer" -Modell sauber bleibt. – v1k45

0

Das Erstellen von vier Tabellen ist nicht der richtige Weg. Alternativ können Sie,

class User(): 

    id = Column(PrimaryKey) 
    username = Column(String, constraints) 
    password = Column(String, constraints) 
    usertype = Column(Enum('student','teacher','parent','admin')) 

- Der Code ist nur für die Darstellung.

Zum Festlegen der Benutzerrolle können Sie die Enum-Eigenschaft verwenden. Falls Sie sqlalchemy verwenden, check this out

How to create ENUM in SQLAlchemy?

+0

Kann ich auch eine Beziehung zwischen Elternbenutzer und Studentenbenutzer implementieren? und der Lehrerbenutzer könnte mehr Felder haben, also kann ich es als optionale Felder im Benutzermodell hinzufügen? –

+0

Es ist nicht ratsam, es der Benutzerklasse hinzuzufügen. Wie unten erwähnt, können Sie eine Profilklasse verwenden und eine Eins-zu-Eins-Beziehung implementieren. – formatkaka

1

können Sie das Authentifizierungssystem Django verwenden: Using the Django authentication system und für jede Kategorie der Benutzer können Sie: Groups

Modelle eine allgemeine Art der Kategorisierung von Benutzern, sodass Sie diesen Benutzern die Berechtigungen oder ein anderes Label zuweisen können. Ein Benutzer kann zu beliebig viele Gruppen gehören.