你好家伙有想法的人有助于解决这个错误,我正在使用Django框架开发一个简单的应用程序使用基于类的视图。未绑定的方法is_valid()必须调用UserLoginForm实例作为第一个参数
这里是我查看代码:
class OpenLogin(FormView):
template_name = 'signin.html'
form_class = UserLoginForm
def post(self, request, *args, **kwargs):
form = self.form_class
next_url = self.request.GET.get('next')
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
obj = authenticate(username=username, password=password)
if obj is not None:
if obj.is_active():
login(self.request, obj)
if next_url is not None:
return HttpResponseRedirect(next_url)
else:
return HttpResponseRedirect(reverse('index'))
else:
messages.error(self.request, 'Error! sorry account is not active')
return HttpResponseRedirect(reverse('signin'))
else:
messages.error(self.request, 'Error!, sorry account is not found')
return HttpResponseRedirect(reverse('signin'))
else:
messages.error(self.request, 'Sorry! an error occurred, try again')
context = {
'title': 'Sign In',
'next_url': next_url,
'messages': messages.get_messages(self.request),
'user': self.request.user,
'form':form,
}
return context
,这里是我的表单类:
unbound method is_valid() must be called with UserLoginForm instance as first argument (got nothing instead)
:
class UserLoginForm(forms.Form):
username = forms.CharField(max_length=User._meta.get_field('email').max_length)
password = forms.CharField(min_length=6, max_length=16, widget=forms.PasswordInput())
def is_valid(self):
valid = super(UserLoginForm, self).is_valid()
if not valid:
return valid
try:
user = User.objects.get(
Q(username=self.cleaned_data['username']) | Q(email=self.cleaned_data['username'])
)
except User.DoesNotExist:
self._errors['no_user'] = 'User does not exist'
return False
if not check_password(self.cleaned_data['password'], user.password):
self._errors['invalid_password'] = 'Password is invalid'
return False
return True
提交我结束了以下错误表格后我的错误在哪里?帮帮忙
[这](https://stackoverflow.com/questions/30227119/extending-form-is-valid)将帮助您了解为什么你不应该扩展is_valid方法 –
如果你完全替换了它的'post()'方法,那么使用'FormView'就没有意义了 - 你应该钩住'form_valid()'和'FormView'的祖先提供的其他钩子。 –