В моем веб-браузере есть два типа пользователей: Клиент и Профессиональный. Есть также два "основных модуля", один для клиентов, чтобы купить вещи и т.д. (Основной сайт), а другой для профессионалов для управления операциями. Для auth я бы хотел:
- Единая форма входа в систему, которая определяет, является ли пользователь клиентом или профессионалом, и направляет ее в правильный модуль (основной сайт или сайт управления).
- Две формы регистрации, одна для клиентов и другая для профессионалов. Вероятно, сайт спросит пользователя, хочет ли она зарегистрироваться как профессионал или как клиент, чтобы инициировать правильный поток регистрации для каждого случая.
- Клиенты будут использовать "основной сайт" и не должны иметь право использовать "сайт управления".
- Профессионалы будут использовать "сайт управления", но не должны быть авторизованы для входа на основной сайт.
- Как профессионалы, так и клиенты зарегистрированы как пользователи, и имеют общие поля, такие как имя пользователя, телефон, электронная почта и т.д.
Так как Django не позволит мне использовать две модели для аутентификации. Я создал пользовательскую подклассу модели AbstractBaseUser и которая служит мне базовым классом auth для Client и Professional.
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
Я также изменил параметр AUTH_USER_MODEL
на:
AUTH_USER_MODEL = 'myapp.BaseUser'
Я также включил django-allauth для управления регистрацией и аутентификацией пользователя. Но теперь я застрял. Я только начал играть с Django/Python, и я не уверен, как это решить.
Кажется, нет официального рекомендованного способа для этого (Внедрение нескольких типов пользователей с Django 1.5). Должен ли я придерживаться подхода подкласса, или я должен делать отношение OnetoOne, указанное в docs?
Как только я правильно настрою модели, как мне перейти к двум регистрационным формам? Можно ли выполнить это с помощью django-allauth, или мне нужно сделать это вручную?
Насколько я знаю, когда зарегистрирован новый пользователь, в таблице User создается новый базовый пользователь. Но так как я буду создавать пользовательские специализации (Client или Professional), как я должен указать, что я также хочу создать связанные с клиентом данные или связанные с ними данные в соответствующей таблице?
Я новичок в Django, поэтому любой совет поможет