Подтвердить что ты не робот

Где хорошее место для работы с аккаунтами/профилем в Django с приложением регистрации Django?

Я заметил, что после входа в систему с регистрацией Django он перенаправляет меня на accounts/profile/. По умолчанию регистрация Django url.py не обрабатывает accounts/profile/, поэтому мне нужно создать свой собственный.

На самом деле эти вопросы трижды:

  • Почему после входа в систему он перенаправляется на accounts/profile/? Есть ли способ изменить это? Предпочтительно после успешной регистрации я хотел бы, чтобы Django перенаправлял обратно на страницу перед страницей входа.
  • Если бы я должен был создать свой собственный просмотр и шаблон для accounts/profile/, то куда его поместить? Встроенный в Django users (auth_user) является общим для всех приложений Django внутри проекта, поэтому я должен помещать view.py в папку проекта, а не внутри папки приложения?
  • Или профиль Django действительно заботится обо всем этом account/profiles/? Я уже расширил класс Django User со своим собственным UserProfile, но он больше похож на дополнительные поля в таблице User, чем на фактический "профиль" (я не создавал аватары или что-то в этом роде, просто простые вещи, такие как адреса и номера телефонов, но самое главное, некоторые пользовательские типы пользователей, от которых зависит мое приложение).
4b9b3361

Ответ 1

Почему после входа в систему он перенаправляет на учетные записи/профиль/? Здесь способ изменить это? Предпочтительно после успешной регистрации я бы как Django перенаправить обратно на страницу перед страницей входа.

Просто измените настройку LOGIN_REDIRECT_URL

Если бы я создал свой собственный просмотр и шаблон для учетных записей/профиля/, то где я должен это положить? Встроенные пользователи Django (auth_user) разделяемый между всеми приложениями Django внутри проекта, поэтому я должен разместить view.py в папке проекта, а не внутри папки приложения?

Мне нравится создавать приложение под названием "project_specific" в каждом проекте. То, где я помещаю все вещи, которые не предназначены для многократного использования, и которые объединяют много приложений.

Вы также можете создать view.py на уровне проекта, но это довольно беспорядочно по сравнению с созданием конкретного проекта.

На самом деле неважно, куда вы его положили.

Или профиль Django действительно заботится обо всем этом учетная запись/профили/предмет? Я уже расширил класс Django User с помощью мой собственный UserProfile, но он больше похож на дополнительные поля для пользователя стол, чем фактический "профиль" (я не создавал аватары или что-то еще это просто простые вещи, такие как адреса и номера телефонов, но самое главное, некоторые пользовательские типы пользователей, от которых зависит мое приложение).

Это не способ добавления дополнительных полей пользователя. Я рекомендую вам прочитать документы на Сохранении дополнительной информации о пользователях.

Ответ 2

Для минимального подхода, который не требует отдельного приложения,

  • Создайте шаблон и назовите его profile.html или что угодно.

    <p>This is your profile, {{ user.username }}.</p>
    
  • В urls.py добавьте шаблон url, который указывает на шаблон вашего профиля, отметьте его login_required и дайте URL-адресу имя:

    # ...
    
    from django.views.generic import TemplateView
    from django.contrib.auth.decorators import login_required
    
    urlpatterns = [
        # ...
        url(r'^accounts/profile/$', TemplateView.as_view(template_name='profile.html'), name='user_profile'),
        # ...
    ]
    
  • В settings.py добавьте следующую строку:

    LOGIN_REDIRECT_URL = 'user_profile'
    

Эта строка сообщает Django выполнить обратный поиск URL по имени при перенаправлении пользователя после входа в систему. Без этой строки ваше приложение все равно будет работать, но оно будет хрупким, поскольку оно зависит от произвольного жестко заданного URL, который неявно настраивается Django. В этой строке, если вы или кто-то другой решите, что профили пользователей должны быть в /me/, вы можете изменить URL-адрес на шаге 2 без нарушения вашего приложения.