Охватываемые темы: Встроенные views, Шаблон смены пароля, Email для сброса пароля, Смена пароля в коде.
Встроенные views
# urls.py
from django.contrib.auth import views as auth_views
urlpatterns = [
path('password/change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
path('password/change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
path('password/reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
path('password/reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
path('password/reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('password/reset/complete/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
Шаблон смены пароля
templates/registration/password_change_form.html:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Изменить пароль</button>
</form>
Email для сброса пароля
# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your@gmail.com'
EMAIL_HOST_PASSWORD = 'app-password'
DEFAULT_FROM_EMAIL = 'your@gmail.com'
# Для разработки (печатает в консоль)
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Смена пароля в коде
from django.contrib.auth import update_session_auth_hash
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
# Обновить сессию чтобы не разлогинить пользователя
update_session_auth_hash(request, user)
messages.success(request, 'Пароль изменён!')
return redirect('profile')
Кастомный PasswordChangeView
class CustomPasswordChangeView(PasswordChangeView):
template_name = 'accounts/password_change.html'
success_url = reverse_lazy('profile')
success_message = 'Пароль успешно изменён'
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!