Meine Web-Funktionen zwei Benutzertypen, Client und Professional. Es gibt auch zwei "Hauptmodule", eines für Kunden, um Zeug usw. zu kaufen (die Hauptseite), und das andere für Fachleute, um Operationen zu verwalten. Für Auth, würde ich gerne haben:Mehrere Benutzertypen für Auth in Django
- Ein einzelnes ‚Zeichen in‘ Form, die anzeigt, ob der Benutzer erkennt, ist ein Client oder ein professionelles und leitet sie an die richtige Modul (Haupt-Website oder Management-Site).
- Zwei Anmeldeformen, eine für Kunden und andere für Profis. Wahrscheinlich wird die Seite den Benutzer fragen, ob sie sich als Fachmann oder als Kunde registrieren möchte, um den richtigen Registrierungsablauf für jeden Fall auszulösen.
- Kunden verwenden die 'Hauptseite' und sollten nicht berechtigt sein, die 'Management-Site' zu verwenden.
- Fachleute verwenden die Verwaltungssite, sollten jedoch nicht berechtigt sein, sich auf der Hauptwebsite anzumelden.
- Sowohl Profis als auch Kunden als Nutzer registriert, und teilen gemeinsame Felder, wie Benutzername, Telefon, E-Mail, etc ...
Da Django wird mich für die Authentifizierung verwenden, um zwei Modelle nicht zulassen. Ich habe benutzerdefinierte Modell-Unterklasse erstellt AbstractBaseUser und die dient mir als Basis-Auth-Klasse für Client und Professional.
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
Ich habe änderte auch die AUTH_USER_MODEL
Einstellung:
AUTH_USER_MODEL = 'myapp.BaseUser'
ich auch django-allauth aufgenommen haben Benutzer Registrierung und Authentifizierung zu verwalten. Aber jetzt stecke ich fest. Ich habe gerade angefangen mit Django/Python zu spielen und ich bin mir nicht sicher, wie ich das lösen soll.
Es scheint, dass es keinen offiziell empfohlenen Weg dafür gibt (Implementing multiple user types with Django 1.5). Sollte ich mich an den Unterklassenansatz halten, oder sollte ich die OnetoOne-Beziehung machen, auf die in der docs hingewiesen wird?
Sobald ich die Modelle richtig eingerichtet habe, wie soll ich mit den beiden Registrierungsformularen fortfahren? Ist es möglich, dies mit Django-Allauth zu erreichen, oder muss ich es manuell tun?
Soweit ich weiß, wenn ein neuer Benutzer registriert ist, wird ein neuer Basisbenutzer in der Benutzer Tabelle erstellt. Aber da ich Benutzerspezialisierungen (Client oder Professional) erstellen werde, wie soll ich angeben, dass ich auch die kundenbezogenen Daten oder berufsbezogene Daten in der entsprechenden Tabelle erstellen möchte?
Ich bin ziemlich neu in Django, so dass jeder Beratung helfen
Dank, du hast mir große Richtlinien für das Projekt-Layout. Aber was ist mit Modellen? Denken Sie, dass die Erstellung von zwei Professional- und Client-Modellen mit einer OneToOnefield-Verknüpfung zurück zum Benutzermodell in Ordnung ist? Auf diese Weise könnte ich beide Benutzertypen problemlos verwalten. – jaime
Das ist sicherlich eine Option, und es ist nicht unbedingt eine schlechte, es sei denn, Sie möchten skalieren. Die andere Option besteht darin, alle Felder in einem einzelnen Benutzermodell zu erstellen und mithilfe von Modellfunktionen zu definieren, welche Felder für die verschiedenen Benutzerarten gelten. Anstatt Ihre DB-Engine zu definieren, welche Felder nicht Null sein können, oder Grenzwerte oder irgendetwas anderes, können Sie Django dazu bringen, die Integrität zu erzwingen und ein wenig mehr Flexibilität bei den Einträgen zu erhalten, die Sie mit einem einzigen Element erstellen können Modell. –
@TitusP könnte bitte einen Blick auf diese Frage werfen: http://stackoverflow.com/questions/35252375/trouble-verstanding-user-object-in-django?noredirect=1#comment58217925_35252375 – user3497437