首页 > 解决方案 > Post 方法对有效和无效数据都返回 false

问题描述

我正在尝试创建一个登录页面,但身份验证对有效和无效数据返回相同的结果(它在所有情况下都返回“无效用户名”)。我检查了所有内容,但不幸的是什么也抓不到。以下是我的代码。我很感激任何帮助。

表格.py:

class UserLoginForm(forms.Form):
    email = forms.CharField(widget = forms.TextInput({'placeholder': 'Enter Your Email', 'class': 'form-control'}))
    password = forms.CharField(widget = forms.PasswordInput({'placeholder':'Password','class':'form-control'}))

视图.py:

class IndexPage(TemplateView):
    template_name = 'Athentication/templates/Athentication/index.html'

class LoginForm(TemplateView):
    template_name = 'Athentication/templates/Athentication/login.html'
    form_class = UserLoginForm
    def get(self,request):
        form = self.form_class()
        return render(request,self.template_name,{'form':form})

    def post(self, request):
        form = self.form_class()
        if request.method =='POST':
            email=request.POST.get('email')
            password=request.POST.get('password')
            user = authenticate(self.request, email = email, password = password)
            if user is not None and user.is_valid:
                login(self.request,user)
                return HttpResponse('valid Username')
            else:
                return HttpResponse('Invalid Username')
        return render(request,template_name,{'form':form})

网址.py:

urlpatterns = [path('', views.LoginForm.as_view(), name='login_page'),
               path('index/', views.IndexPage.as_view(), name = 'index'),
               path('admin/', admin.site.urls),
               ]

登录.html:

<form method="post" >
                <div class="form-group mb-3">
                  <div class="input-group input-group-merge input-group-alternative">
                    <div class="input-group-prepend">
                      <span class="input-group-text"><i class="ni ni-email-83"></i></span>
                    </div>
                    {{form.email}}
                    
                  </div>
                </div>
                <div class="form-group">
                  <div class="input-group input-group-merge input-group-alternative">
                    <div class="input-group-prepend">
                      <span class="input-group-text"><i class="ni ni-lock-circle-open"></i></span>
                    </div>
                    {{form.password}}
                  </div>
                </div>
                <div class="custom-control custom-control-alternative custom-checkbox">
                  <input class="custom-control-input" id=" customCheckLogin" type="checkbox">
                  <label class="custom-control-label" for=" customCheckLogin">
                    <span class="text-muted">Remember me</span>
                  </label>
                </div>
                <div class="text-center">
                    <input class="btn btn-primary my-4" type="submit"  value="Enter"  />
                  
                    {% csrf_token %}
                </div>
              </form>
            </div>
          </div>

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-templates

解决方案


像这样更改您的代码:

def post(self, request):
    form = self.form_class()
    if form.is_valid():
        email=request.POST.get('email')
        password=request.POST.get('password')
        user = authenticate(self.request, email = email, password = password)
        if user:
            login(self.request,user)
            return HttpResponse('valid Username')
        else:
            return HttpResponse('Invalid Username')
    return render(request,template_name,{'form':form})

推荐阅读