Moja strona internetowa zawiera dwa typy użytkowników: Klient i Professional. Istnieją również dwa "główne moduły", jeden dla klientów do zakupu rzeczy i tak dalej (strona główna), a drugi dla profesjonalistów do zarządzania operacjami. Dla uwierzytelniania, chciałbym mieć:Wiele typów użytkowników Auth w Django
- jednego „wejść” formularza, który wykrywa, czy użytkownik jest klientem lub profesjonalny i przekazuje ją do prawej strony modułu (głównej lub strony kierownictwa).
- Dwie formy "rejestracji", jedna dla klientów i inna dla profesjonalistów. Prawdopodobnie strona zapyta użytkownika, czy chce zarejestrować się jako profesjonalny lub jako klient, aby uruchomić odpowiedni przepływ rejestracji dla każdego przypadku.
- Klienci będą używać "strony głównej" i nie powinni mieć autoryzacji do korzystania z "witryny zarządzania".
- Specjaliści wykorzystają "witrynę zarządzania", ale nie powinni mieć uprawnień do logowania się na stronie głównej.
- Zarówno profesjonaliści i klienci są zarejestrowani jako użytkownicy, i wspólne obszary, takie jak nazwa użytkownika, telefon, email, etc ...
Ponieważ Django nie pozwoli mi korzystać z dwóch modeli do uwierzytelniania. Stworzyłem niestandardową podklasę modelu AbstractBaseUser, która służy mi jako podstawowa klasa auth dla klientów i profesjonalistów.
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
Ja również zmienił ustawienie AUTH_USER_MODEL
do:
AUTH_USER_MODEL = 'myapp.BaseUser'
Mam również django-allauth zarządzać rejestracji użytkownika i uwierzytelniania. Ale teraz utknąłem. Właśnie zacząłem grać z Django/Pythonem i nie jestem pewien, jak rozwiązać ten problem.
Wygląda na to, że nie ma oficjalnego zalecanego sposobu (Implementing multiple user types with Django 1.5). Czy powinienem trzymać się podejścia opartego na podklasach, czy też powinienem wykonać relację OnetoOne wskazaną w docs?
Kiedy mam poprawnie skonfigurowane modele, jak mam postępować z dwoma formularzami rejestracyjnymi? Czy można to osiągnąć za pomocą django-allauth, czy też muszę to zrobić ręcznie?
O ile mi wiadomo, po zarejestrowaniu nowego użytkownika w tabeli użytkownika tworzony jest nowy użytkownik podstawowy. Ale skoro będę tworzyć specjalizacje użytkownika (klienta lub profesjonalisty), jak powinienem określić, że chcę również utworzyć dane związane z klientem lub dane związane z zawodem w odpowiedniej tabeli?
Jestem całkiem nowy, Django, więc każda rada pomoże
Dzięki, dałeś mi świetne wskazówki dotyczące układu projektu. Ale co z modelami? Czy sądzisz, że stworzenie dwóch modeli Professional i Client z OneToOnefield łączących się z modelem użytkownika jest w porządku? W ten sposób mógłbym z łatwością zarządzać obydwoma typami użytkowników, tak myślę ... – jaime
Jest to z pewnością opcja, i niekoniecznie jest zła, chyba że chcesz skalować. Inną opcją jest utworzenie wszystkich pól w jednym modelu użytkownika i użycie funkcji modelu do zdefiniowania, które pola dotyczą różnych rodzajów użytkowników. Zasadniczo, zamiast tego, że twój silnik DB definiuje, które pola mogą nie być wartościami null, lub wartościami granicznymi, lub cokolwiek innego w tym zakresie, możesz sprawić, że Django wymusi integralność i uzyska nieco większą elastyczność w tym, jakie wpisy możesz wykonać za pomocą pojedynczego Model. –
@TitusP, proszę spojrzeć na to pytanie: http://stackoverflow.com/questions/35252375/trouble-understaing-user-object-in-django?noredirect=1#comment58217925_35252375 – user3497437