Структура проекта 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, особенно рассказ о многократно используемых приложениях, это заставит вас совершенно по-другому думать о том, как структурировать свой проект.

Другие вопросы по тегам