18.form 对登录错误进行提示

上节说到views.py里login_form = LoginForm(request.POST)是一个LoginForm的实例,里面包含对users和password的要求。再把request.POST传进去进行检验以确定是否符合要求。login_form里面有个errors属性,如果不符合则里面会存储不符合的原因。login_form.is_valid()检查errors是否为空,如果为空则符合条件,is_valid()为True,然后再进行接下来的检验看密码和账号匹配否。
现在想实现对用户输入错误信息提示的功能,可以利用errors,如果不符合条件,则把errors里的错误原因显示在前端,且把输入错误的输入框用红框focus。这需要把后台变量传递到前端。

class LoginView(View):     #这样就不用做POST和GET的判断了,django根据情况自己调用
    def get(self,request):
        return render(request, "login.html", {})
    def post(self,request):
        login_form = LoginForm(request.POST)  #前端的html文件中变量名必须和forms里定义的两个名字相同才能自动检查
        if login_form.is_valid():   #is_valid检查login_form的error是否为空,为空则满足条件
            user_name = request.POST.get("username", "")
            pass_word = request.POST.get("password", "")
            user = authenticate(username=user_name, password=pass_word)
            if user is not None:
                login(request, user)
                return render(request,"index.html")
            else:
                return render(request, "login.html", {"msg": "用户名或密码错误"})
        else:
            return render(request, "login.html", {"login_form":login_form})

这样login_form和msg都传了。先检查符合条件不,如不符合则显示errors。如果符合再检查密码对不对,如不对则提示msg。login.html的表单里:

 
{% csrf_token %}

两个label上面

errorput是用来显示红框的。

 

这里的error btns login-form-tips大概是用来显示tips的。遍历errors(这是个字典的形式,所以要用items),把所有的value提取并显示出来,key就不显示了,外加msg。逻辑由后台处理,判断该显示errors还是msg。

你可能感兴趣的:(18.form 对登录错误进行提示)