Я хотел бы иметь возможность войти в систему / аутентифицировать пользователя как «магазин» или «клиент».
Есть ли способ заставить эту работу работать с вышеуказанной моделью?
Да, но.
http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users
Если вы хотите использовать автоматические функции, вы получаете один (один) объект класса Profile, связанный с пользователем.
Если вы не хотите использовать функции автоматического профиля, он будет работать просто отлично. Вы не сможете использовать настройку AUTH_PROFILE_MODULE
или метод get_profile()
User
. Вы будете вынуждены написать много
try:
CustomerProfile.objects.get( user=request.user )
except CustomerProfile.DoesNotExist:
# hmmm. Must be a Store, not a Customer.
Это не так уж плохо, поскольку в основном это будет одна универсальная функция для извлечения связанных
профиль "трудный путь".
Я также буду смотреть на декоратор @login_required, чтобы различать магазин, в котором зарегистрирован и покупатель. Любой совет, как поступить?
Добавьте метод save()
к каждому классу, который проверяет существование объекта объекта. Если вы попытаетесь создать CustomerProfile для пользователя, CustomerProfile.save () проверит StoreProfile и сгенерирует исключение, если оно существует.
Два отношения являются эксклюзивными. Вы должны убедиться в этом в своих различных моделях.
Напиши два декоратора, ты будешь счастливее. Они имеют значительное перекрытие, но лучше написать много простых декораторов без параметров, чем работать с убер-декоратором.
@customer_required
и @store_required
. Каждый будет делать то, что делает @login_required
, а также определять, какие отношения с Пользователем имеет запись customer_required должен проверить наличие отношений CustomerProfile с пользователем. store_required проверяет связь StoreProfile с пользователем.
http://docs.djangoproject.com/en/1.2/topics/auth/#groups
С другой стороны, у вас есть группы, определенные в Django. Я бы порекомендовал вам использовать группы и названия групп вместо того, чтобы пытаться создавать такие необычные профили.
Иметь один "главный" профиль со всеми атрибутами.
Используйте таблицу Django Group, чтобы определить различные роли («Пользователь», «Магазин») и правильно распределить пользователей по группам.
Затем проверьте имя группы в ваших декораторах авторизации @store_required и @customer_required.