我有几个问题
我使用django 1.11.7和基于类的视图
这是我的views.py
class ShopLoginView(FormView):
template_name = 'shop/login.html'
form_class = LoginForm
success_url = '/shop/'
这是我的表格。py
class LoginForm(forms.Form):
email = forms.EmailField()
password = forms.CharField()
def clean(self):
cleaned_data = super(LoginForm, self).clean()
email = cleaned_data.get("email")
password = cleaned_data.get("password")
user = authenticate(username=email, password=password)
if user is not None:
print(user)
else:
print(user)
raise forms.ValidationError("Wrong Email or Password")
这是我使用Exists()方法的时候
class LoginForm(forms.Form):
email = forms.EmailField()
password = forms.CharField()
def clean(self):
cleaned_data = super(LoginForm, self).clean()
email = cleaned_data.get("email")
password = cleaned_data.get("password")
user = User.objects.filter(email=email, password=password)
if user.exists():
print(user)
else:
print(user)
raise forms.ValidationError("Wrong Email or Password")
关于可能发生的事情的任何想法?
答案 0 :(得分:0)
您已经以某种方式将密码存储为纯文本。您应该不能能够使用filter
或exists
通过用户名和密码来查找用户;纯文本密码不匹配。
authenticate
将始终对所传递的密码进行哈希处理,并将其与数据库中现有的哈希版本进行比较。由于您保存的密码未进行哈希处理,因此不匹配。
您没有显示创建用户的方式,但是必须始终使用create_user
或使用set_password
设置密码。
答案 1 :(得分:-1)
您可以像这样检查身份验证,以对哈希密码进行身份验证,然后进行匹配:-
user = authenticate(username=username, password=password)
if user and user.is_active:
print(user)