我试图将视图(控制器)的身份验证分开。在我看来,代码似乎并不是一个好地方。然后我来到下面代码中显示的结果。这是错误的,我可以进一步改善,或担心这是愚蠢的?
views.py
def sign_in(request):
form = SignInForm(request.POST or None)
if form.is_valid():
login(request, form.user)
return redirect('user/home/')
context = {'sign_in_form' : form}
context.update(csrf(request))
return render_to_response('app_user/sign_in.html', context)
forms.py
class SignInForm(forms.Form):
username = forms.CharField(required=True, max_length=30, label='Username')
password = forms.CharField(widget=forms.PasswordInput, max_length=30, label='Password')
user = None
def clean(self):
data = self.cleaned_data
if super(SignInForm, self).is_valid():
user = authenticate(username=data.get('username'),password=data.get('password'))
if user is None:
raise forms.ValidationError("Wrong user or password")
if not user.is_active:
raise forms.ValidationError("User is disabled")
self.user = user
return data
答案 0 :(得分:1)
我不明白你的代码有什么问题。为什么你说错了?
除此之外,您为什么不喜欢使用Auth登录表单?查看Auth模块中的AuthenticationForm,它完全按照您的要求完成。
此外,您应该考虑在视图中传递请求上下文,这样您就不必手动传递csrf。