Охватываемые темы: Built-in Views, Password Change Template, Email for Password Reset, Password Change in Code.
Built-in 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'),
]
Password Change Template
templates/registration/password_change_form.html:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Change password</button>
</form>
Email for Password Reset
# 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'
# For development (prints to console)
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Password Change in Code
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 to keep the user logged in
update_session_auth_hash(request, user)
messages.success(request, 'Password changed!')
return redirect('profile')
Custom PasswordChangeView
class CustomPasswordChangeView(PasswordChangeView):
template_name = 'accounts/password_change.html'
success_url = reverse_lazy('profile')
success_message = 'Password changed successfully'
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!