Python Django-关注点和身份验证分离

Python Django-关注点和身份验证分离,python,django,authentication,django-views,separation-of-concerns,Python,Django,Authentication,Django Views,Separation Of Concerns,我试图分离视图(控制器)的身份验证。在我看来,代码似乎不在一个好地方。然后我得到了如下代码所示的结果。这是错误的,我可以提高更多,还是担心这是愚蠢的 视图.py def sign_in(request): form = SignInForm(request.POST or None) if form.is_valid(): login(request, form.user) return redirect('user/home/') con

我试图分离视图(控制器)的身份验证。在我看来,代码似乎不在一个好地方。然后我得到了如下代码所示的结果。这是错误的,我可以提高更多,还是担心这是愚蠢的

视图.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)
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
forms.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)
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

我不明白你的代码有什么问题。你为什么说它错了

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

也应考虑在视图中传递请求上下文,这样您就不必手动通过CSRF。