forms.py
class UpdatePasswordForm(forms.Form):
password1 = forms.CharField(
label='Contraseña',
required=True,
widget=forms.PasswordInput(
attrs={
'placeholder': 'Contraseña Actual'
}
)
)
password2 = forms.CharField(
label='Contraseña',
required=True,
widget=forms.PasswordInput(
attrs={
'placeholder': 'Contraseña Nueva'
}
)
)
views.py
tiene el mixin
class UpdatePasswordView(LoginRequiredMixin, FormView):
template_name = 'users/update.html'
form_class = UpdatePasswordForm
success_url = reverse_lazy('users_app:user-login')
login_url = reverse_lazy('users_app:user-login')
def form_valid(self, form):
usuario = self.request.user
user = authenticate(
username=usuario.username,
password=form.cleaned_data['password1']
)
if user:
new_password = form.cleaned_data['password2']
usuario.set_password(new_password)
usuario.save()
logout(self.request)
return super(UpdatePasswordView, self).form_valid(form)
urls.py
#
from django.urls import path
from . import views
app_name = "users_app"
urlpatterns = [
path(
'update/',
views.UpdatePasswordView.as_view(),
name='user-update',
),
]
templates/users/update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Cambiar Contraseña: {{ user.get_full_name }}</h1>
<form method="post">{% csrf_token %}
{{form.as_p}}
<button type="submit">Actualziar</button>
</form>
</body>
</html>
home/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Panel de usuario</h1>
<h3>Bienvenidos: {{user}}</h3>
<ul>
<li><a href="{% url 'users_app:user-logout' %}">Cerrar Sesion</a></li>
<li><a href="{% url 'users_app:user-update' %}">Actualizar Datos</a></li>
</ul>
</body>
</html>
tienes q ingresar primero para poder cambiar el password yendo http://127.0.0.1:8000/panel

/

Última modificación: 13 Jan 2023 16:45
No hay comentarios aún
Sé el primero en comentar este artículo