Создание сайта на Django: Урок 25, изменение пароля в профиле Django
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Руководства «Django»
Комментариев: 0

Изменение пароля в профиле пользователя Django

Создадим форму изменения пароля в файле authenticated.py

modules/system/forms/authenticated.py

from django.contrib.auth.forms import SetPasswordForm

class UserPasswordChangeForm(SetPasswordForm):
    """
    Форма изменения пароля
    """
    def __init__(self, *args, **kwargs):
        """
        Обновление стилей формы
        """
        super().__init__(*args, **kwargs)
        for field in self.fields:
            self.fields[field].widget.attrs.update({
                'class': 'form-control',
                'autocomplete': 'off'
            })

Пояснения:

  • Наследуемся от уже встроенной формы в Django - SetPasswordForm
  • Добавляем стили Bootstrap в форму

Теперь создадим представление в файле authenticated.py

modules/system/views/authenticated.py

from django.contrib.auth.views import PasswordChangeView
from modules.system.forms.authenticated import UserPasswordChangeForm

class UserPasswordChangeView(SuccessMessageMixin, PasswordChangeView):
    """
    Изменение пароля пользователя
    """
    form_class = UserPasswordChangeForm
    template_name = 'modules/system/authenticated/password-change.html'
    success_message = 'Ваш пароль был успешно изменён!'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Изменение пароля на сайте'
        return context

    def get_success_url(self):
        return reverse_lazy('profile', kwargs={'slug': self.request.user.profile.slug})

Пояснения:

  • Импортируем PasswordChangeView и UserPasswordChangeForm
  • Наследуемся от уже стандартного представления по смене пароля PasswordChangeView в Django 4.1
  • Не забываем про миксин для уведомлений SuccessMessageMixin
  • После успешной смены пароля, перенаправляем пользователя в его профиль.

Также нам необходимо добавить новое представление в urls.py:

from django.urls import path

from modules.system.views import ProfileView, ProfileEditView, RegisterCreateView, UserLoginView, UserPasswordChangeView

urlpatterns = [
    path('user/edit/', ProfileEditView.as_view(), name='profile-edit'),
    path('user/<str:slug>/', ProfileView.as_view(), name='profile'),
    path('register/', RegisterCreateView.as_view(), name='register'),
    path('login/', UserLoginView.as_view(), name='login'),
    path('password-change/', UserPasswordChangeView.as_view(), name='password-change'),
]

Пояснения:

  • Добавили password-change импортировав UserPasswordChangeView, задали название password-change.

Давайте теперь создадим шаблон для изменения:

templates/modules/system/authenticated/password-change.html

{% extends 'main.html' %}
{% block content %}
    <div class="card mb-3 border-0 nth-shadow">
        <div class="card-body">
            <div class="card-title nth-card-title">
                <h4>Изменение пароля на сайте</h4>
            </div>
            <form method="post">
                {% csrf_token %}
                {{ form.as_p }}
                <button type="submit" class="btn btn-dark mt-2">Подтвердить изменение пароля</button>
            </form>
        </div>
    </div>
{% endblock %}

Пояснения:

  • Простая POST форма, с Bootstrap стилями.

Давайте проверим форму изменения пароля:

Переходим на страницу http://127.0.0.1:8000/s/password-change/ под авторизованным пользователем, и видим следующее:

После успешной смены пароля на сайте:

Таким образом, мы создали форму изменения пароля. В следующем уроке побольше мы коснёмся восстановления пароля, так как там уже необходимо провести настройки для email отправки.

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)