Django之ModelForm通过ajax用户登录验证

 

1、views代码:

  

from django.core.exceptions import ValidationError
class JsonCustomEncoder(json.JSONEncoder):
    def default(self,field):
        if isinstance(field,ValidationError):
            return {'code':field.code,'messages':field.messages}
        else:
            return json.JSONEncoder.default(self,field)

ret={'status':"false",'error':None,'data':None}
def login(request):
    if request.method=='POST':
        obj = forms.loginForm(request.POST)
        if obj.is_valid():
            a=int(5)
            ret['status']="true"
            username = obj.cleaned_data['username']
            password = obj.cleaned_data['pwd']
            namefilter = models.User.objects.filter(username=username,pwd=password)
            request.session["username"]=obj.cleaned_data['username']
            request.session["is_login"]=True
            request.session.set_expiry(5)
            if namefilter:
                # return HttpResponse(json.dumps(ret))
                return HttpResponse(json.dumps(ret))
        else:
            # ret["status"]=False
            ret['error']=obj.errors
            result = json.dumps(ret,cls=JsonCustomEncoder)
            print(result)
            return HttpResponse(result)
    elif request.method=="GET":
        obj = forms.loginForm()
        return render(request,'login.html',{'form':obj})
    # return render(request,'login.html')



def index(request):
a=request.session.get("username")
if not a:
return redirect('/login/')
return render(request,'index.html',{'a':a})
 

froms.py

class loginForm(forms.Form):
    username = fields.CharField(
        required=True,
        widget=widgets.TextInput(attrs={'placeholder': '请输入用户名','id':'username'}),
        min_length=6,
        max_length=12,
        error_messages={'required':'用户名不能为空'}
    )
    pwd = fields.CharField(
        widget=widgets.PasswordInput(attrs={'placeholder': '请输入密码','id':'pwd'}),
        required=True,
        min_length=6,
        max_length=12,
        error_messages={'required':'密码不能为空'}
    )

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('pwd')
        c = models.User.objects.filter(username=username,pwd=password)
        if c:
            return self.cleaned_data
        else:
            self.add_error('pwd','用户名或密码不一致')
            return None

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form id="fm" method="post" action="/login/">
        {% csrf_token %}
        <p><label for="username">用户名:</label>{{ form.username }}</p>
        <p><label for="password">密码:</label>{{ form.pwd }}<span id="error" style="color: red"></span></p>
{#         <input ></input>#}
        <button id="submit" type="button">提交</button>
    </form>
<script src="/static/jquery-3.2.1.min.js"></script>
<script>
    $(function () {
        $('#submit').click(function () {
            $.ajax({
                url:'/login/',
                type:"POST",
                data:$('#fm').serialize(),
                success:function (data) {
                    arg = JSON.parse(data);
                    if(arg["status"]==="true"){
                        location.href="/index/"
                    }else if(arg["status"]==="false"){
{#                        alert(arg["error"]["pwd"][0]);#}
                        var a=arg["error"]["pwd"][0];
{#                        alert(a);#}
                        $("#error").text(a);

                    }
                }
            })
        })
    })
</script>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    </style>
</head>
<body>
    <ul>欢迎登录:{{ a }}</ul>
</body>
</html>

验证

Django之ModelForm通过ajax用户登录验证

Django之ModelForm通过ajax用户登录验证