Структура проекта Django, рекомендуемая структура для совместного использования расширенной модели "Пользователь" в приложениях?
Мне интересно, какова общая структура проекта / приложения, когда пользовательская модель расширяется / разбивается на подклассы, и эта модель результирующего пользователя используется и используется несколькими приложениями.
Я хотел бы сослаться на одну и ту же модель пользователя в нескольких приложениях. Я еще не создал интерфейс входа в систему, поэтому не уверен, как он должен сочетаться.
На ум приходит следующее:
project.loginapp.app1
project.loginapp.app2
Есть ли общая ситуация для этой ситуации? Будет ли вход в систему обрабатываться "приложением для входа"?
Похож на этот вопрос, но более конкретно. настройка приложения django
ОБНОВИТЬ
Уточнил мой вариант использования выше. Я хотел бы добавить поля (расширение или подкласс?) В существующую модель аутентификации пользователя. А затем ссылаться на эту модель в нескольких приложениях.
3 ответа
Почему вы расширяете пользователя? Просьба уточнить.
Если вы добавляете больше информации о пользователях, вам не нужно проверять свой собственный пользователь и систему аутентификации. Версия Джанго об этом довольно солидна. Управление пользователями находится в django.contrib.auth.
Если вам нужно настроить информацию, хранящуюся у пользователей, сначала определите модель, такую как
class Profile(models.Model):
...
user = models.ForeignKey("django.contrib.auth.models.User", unique=True)
а затем установить
AUTH_PROFILE_MODULE = "appname.profile"
в ваших settings.py
Преимущество установки этого позволяет вам использовать такой код в ваших представлениях:
def my_view(request):
profile = request.user.get_profile()
etc...
Если вы пытаетесь предоставить пользователям больше возможностей для аутентификации, вы можете добавить аутентификационный бэкэнд. Расширьте или повторно внедрите django.contrib.auth.backends.ModelBackend и установите его в качестве AUTHENTICATION_BACKENDS в settings.py.
Если вы хотите использовать концепцию разрешений или групп, отличную от той, которая предоставляется django, ничто не остановит вас. Django использует эти два понятия только в django.contrib.admin (что я знаю), и вы можете использовать другое понятие для этих тем по своему усмотрению.
Сначала вы должны проверить, удовлетворяет ли модуль contrib.auth вашим потребностям, поэтому вам не нужно заново изобретать колесо:
http://docs.djangoproject.com/en/dev/topics/auth/
редактировать:
Проверьте этот фрагмент, который создает UserProfile после создания нового пользователя.
def create_user_profile_handler(sender, instance, created, **kwargs):
if not created: return
user_profile = UserProfile.objects.create(user=instance)
user_profile.save()
post_save.connect(create_user_profile_handler, sender=User)
Я думаю, что названия "проект / приложение" выбраны неправильно. это больше похоже на "сайт / модуль". например, приложение может быть очень полезным без просмотра.
Посмотрите доклады DjangoCon 2008 года на YouTube, особенно рассказ о многократно используемых приложениях, это заставит вас совершенно по-другому думать о том, как структурировать свой проект.