Где хорошее место для работы с аккаунтами/профилем в 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
, чем на фактический "профиль" (я не создавал аватары или что-то в этом роде, просто простые вещи, такие как адреса и номера телефонов, но самое главное, некоторые пользовательские типы пользователей, от которых зависит мое приложение).
Ответы
Ответ 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 без нарушения вашего приложения.
Ответ 3
Вы можете использовать django userena для пользовательской области полного стека: https://django-userena.readthedocs.org/en/latest/