【问题标题】:Django change password link is not active?Django更改密码链接无效?
【发布时间】:2021-11-29 10:35:41
【问题描述】:

我正在学习 Django 中的身份验证。今天我被这个问题困住了,我无法弄清楚如何解决它。我想制作一个密码更改表格。但是更改表单链接无效,我不知道如何修复它。

这是我的意见.py

@login_required
def user_change(request):
    current_user = request.user
    form = UserProfileChange(instance = current_user)
    if request.method == 'POST':
        form = UserProfileChange(request.POST,instance = current_user)
        if form.is_valid():
            form.save()
            form = UserProfileChange(instance = current_user)
    form = UserProfileChange(instance = current_user)

    return render(request, 'App_Login/change_profile.html', context={'form':form})

@login_required
def pass_change(request):
    current_user = request.user
    form  = PasswordChangeForm(current_user)
    if request.method == 'POST':
        form = PasswordChangeForm(current_user, data = request.POST)
        if form.is_valid():
            form.save()
    return render(request, 'App_login/pass_change.html', context = {'form':form})

这里是 urls.py 文件

from django.urls import path
from . import views

app_name  = 'App_Login'

urlpatterns = [
    path('signup/', views.signup, name = "signup"),
    path('signin/', views.login_page, name = 'signin'),
    path('logout/' , views.logout_user, name = "logout" ),
    path('profile/' , views.profile, name = "profile" ),
    path('change-profile/' , views.user_change, name = "user_change" ),
    path('password/' , views.pass_change, name = "pass_change" ),

]

这里是 change_profile.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block title %} change User profile {% endblock %}


{% block body_block %} 

<h2>Change Profile</h2>

<form method="post">
    {% csrf_token %}
    {{form|crispy}}
    <input type="submit" value="Change" class = "btn btn-primary btn-sm">
</form>
{% endblock %}

这是 forms.py 文件

from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import User

class SignupForm(UserCreationForm):
    email = forms.EmailField(label = "Email Address", required=True)
    class Meta:
        model = User
        fields = ('username','email', 'password1', 'password2')


class UserProfileChange(UserChangeForm):
    class Meta:
        model = User
        fields = ('username','email','first_name', 'last_name', 'password')

【问题讨论】:

  • 请出示UserProfileChangeApp_Login/change_profile.html
  • @Alasdair 我更新了你现在可以查看
  • UserChangeForm 设计用于 Django 管理员。当您使用松脆的表单时,似乎链接正在被转义。我看不到防止这种情况的好方法。我建议从您的UserChangeForm 表单中删除password,然后更新change_profile.html 模板以将您自己的链接添加到更改密码页面。

标签: python django django-views django-templates


【解决方案1】:

Django 有一个内置功能可以在你的 urls 文件中根据你的需要修改它

from django.contrib.auth import views as auth_views

urlpatterns = [
#
# Rest Of Your Code
#
path('password/',auth_views.PasswordChangeView.as_view(
        template_name='template to render here',
        success_url = 'page to redirect after password is changed'),name='password')
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2019-01-12
    • 2012-07-09
    相关资源
    最近更新 更多