大家好,有想法的人有助于解决这个错误,我使用Django框架开发一个使用基于类的视图的简单应用程序。
这是我的观看代码:
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
这是我的表格类:
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
提交表单后,我最终收到以下错误:
unbound method is_valid() must be called with UserLoginForm instance as first argument (got nothing instead)
我的错误在哪里?帮忙
答案 0 :(得分:1)
你在这里遇到了一些问题,但是这会导致你的错误:
form = self.form_class
...
if form.is_valid():
self.form_class
是对类的引用,而不是表单实例。您应该根据您的请求构建表单实例,并验证:
form = self.form_class(request.POST)