0

我试图分离视图(控制器)的身份验证。在我看来,代码看起来并不合适。然后我看到下面代码中显示的结果。这是错误的,我可以改善更多,或担心这是愚蠢的?Django - 关注和认证的分离

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 

回答

1

我不明白什么是错与您的代码。你为什么说错了?

除此之外,为什么你不喜欢使用Auth登录表单?看看Auth模块中的AuthenticationForm,它完成了你正在做的事情。

此外,您应该考虑在您的视图中传递请求上下文,这样您就不必手动传递csrf。