如何在Django 1.6中检查密码?

0 投票
1 回答
935 浏览
提问于 2025-04-18 03:08

请帮我解决这个错误

我在forms.py文件中检查用户的密码

from django import forms
from userprofile.models import UserProfile
from django.contrib.auth.models import User
from django.forms import ModelForm

class ChangePasswordForm(forms.Form):
    password_old = forms.CharField(max_length=30)
    password1 = forms.CharField(widget=forms.PasswordInput())
    password2 = forms.CharField(widget=forms.PasswordInput())

    def clean_password_old(self):
        cleaned_data = self.cleaned_data
        password_old = cleaned_data.get("password_old") 
        if not User.check_password(password_old):
            raise forms.ValidationError("Passwords is not correct")
        else:
            return cleaned_data

    def clean(self):    
        cleaned_data = self.cleaned_data
        password1 = cleaned_data.get("password1")
        password2 = cleaned_data.get("password2")

        if password1 != password2:      
            raise forms.ValidationError("Passwords must be same")
        else:                           
            return cleaned_data

但是在提交表单后,屏幕上出现了以下错误信息:

TypeError at /userprofile/password_page/
check_password() missing 1 required positional argument: 'raw_password'
Request Method: POST
Request URL:    http://127.0.0.1:8000/userprofile/password_page/
Django Version: 1.6.2
Exception Type: TypeError
Exception Value:    
check_password() missing 1 required positional argument: 'raw_password'

1 个回答

2

这一行其实不太合理:

if not User.check_password(password_old):

你是在对用户类(User class)调用 check_password,而不是对某个具体的用户实例调用。但你需要检查的是一个实际用户的密码,这就意味着你必须有这个用户的具体信息。

总之,自己写这个没有必要。Django已经提供了一个完整的修改密码的视图和表单:可以查看 文档

撰写回答