• Form组件验证之ajax提交数据并显示错误信息


    前端登陆界面(重点是js操作--接收到后台发来的错误信息怎么在页面显示出来)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>用户登录</h1>
        <form id="f1" action="/login/" method="POST">
            {% csrf_token %}
            <p>
                <input type="text" name="user" />{{ obj.errors.user.0 }}
            </p>
            <p>
                <input type="password" name="pwd" />{{ obj.errors.pwd.0 }}
            </p>
            <input type="submit" value="提交" />
            <a onclick="submitForm();">提交</a>
        </form>
        <script src="/static/jquery-1.12.4.js"></script>
        <script>
            function submitForm(){
                $('.c1').remove();
                $.ajax({
                    url: '/ajax_login/',
                    type: 'POST',
                    data: $('#f1').serialize(),// user=alex&pwd=456&csrftoen=dfdf
                    dataType:"JSON",
                    success:function(arg){
                        console.log(arg);
                        if(arg.status){
    
                        }else{
                            $.each(arg.msg,function(index,value){
                                console.log(index,value);
                                var tag = document.createElement('span');
                                tag.innerHTML = value[0];
                                tag.className = 'c1';
                                $('#f1').find('input[name="'+ index +'"]').after(tag);
                            })
                        }
                    }
                })
            }
        </script>
    </body>
    </html>
    View Code

    views.py中接收数据并作验证,然后把错误信息返回给前端

    from django.shortcuts import render,redirect,HttpResponse
    from django.forms import Form
    from django.forms import fields
    from django.forms import widgets
    
    class LoginForm(Form):
        user = fields.CharField(required=True)
        pwd = fields.CharField(min_length=18)
    
    
    def login(request):
        if request.method == 'GET':
            return render(request,'login.html')
        else:
            obj = LoginForm(request.POST)
            if obj.is_valid():
                print(obj.cleaned_data)
                return redirect('http://www.baidu.com')
            return render(request,'login.html',{'obj': obj})
    
    
    ajax接收并发送数据
    def ajax_login(request): 
        import json
        ret = {'status': True,'msg': None}
        obj = LoginForm(request.POST)
        if obj.is_valid():
            print(obj.cleaned_data)
        else:
            # print(obj.errors) # obj.errors对象
            ret['status'] = False
            ret['msg'] = obj.errors
        v = json.dumps(ret)
        return HttpResponse(v)
    
    #
    # class TestForm(Form):
    #     t1 = fields.CharField(
    #         required=True,
    #         max_length=8,
    #         min_length=2,
    #         error_messages={
    #             'required': '不能为空',
    #             'max_length': '太长',
    #             'min_length': '太短',
    #         }
    #     )
    #     t2 = fields.IntegerField(
    #         min_value=10,
    #         max_value=1000,
    #         error_messages={
    #             'required': 't2不能为空',
    #             'invalid': 't2格式错误,必须是数字',
    #             'min_value': '必须大于10',
    #             'max_value': '必须小于1000',
    #         },
    #     )
    #     t3 = fields.EmailField(
    #         error_messages={
    #             'required': 't3不能为空',
    #             'invalid': 't3格式错误,必须是邮箱格式',
    #         }
    #     )
    
    
    
    
    
    class TestForm(Form):
        t1 = fields.CharField(required=True,max_length=8,min_length=2,
            error_messages={
                'required': '不能为空',
                'max_length': '太长',
                'min_length': '太短',
            }
        )
        t2 = fields.EmailField()
    
    def test(request):
        if request.method == "GET":
            obj = TestForm()
            return render(request,'test.html',{'obj': obj})
        else:
            obj = TestForm(request.POST)
            if obj.is_valid():
                print(obj.cleaned_data)
            else:
                print(obj.errors)
            return render(request,'test.html',{'obj':obj})
    
    
    
    class RegiterForm(Form):
        user = fields.CharField(min_length=8)
        email = fields.EmailField()
        password = fields.CharField()
        phone = fields.RegexField('139d+')
    
    
    def register(request):
        if request.method == 'GET':
            obj = RegiterForm()
            return render(request,'register.html',{'obj':obj})
        else:
            obj = RegiterForm(request.POST)
            if obj.is_valid():
                print(obj.cleaned_data)
            else:
                print(obj.errors)
            return render(request,'register.html',{'obj':obj})
    View Code
  • 相关阅读:
    【面霸2】
    【面霸1】php知识点
    【技术宅11】php入门运算
    【技术宅10】顺序二分查找算法
    【技术宅9】遍历一个文件夹下的所有文件和子文件夹
    【技术宅7】一个或多个虚拟主机配置方法
    【技术宅6】把一个无限级分类循环成tree结构
    【技术宅5】抓去网页数据的3种方法
    【技术宅4】如何把M个苹果平均分给N个小朋友
    【技术宅3】截取文件和url扩展名的N种方法
  • 原文地址:https://www.cnblogs.com/weigege2015/p/8601162.html
Copyright © 2020-2023  润新知