如何在Django 1.6中检查密码?
请帮我解决这个错误
我在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已经提供了一个完整的修改密码的视图和表单:可以查看 文档。