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>

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(‘139\d+‘)

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})

原文地址:https://www.cnblogs.com/weigege2015/p/8601162.html

时间: 2024-11-08 23:38:43

Form组件验证之ajax提交数据并显示错误信息的相关文章

jquery validate如何不提交表单就做验证(ajax提交数据)

if($("#FromID").valid()){ $.ajax({ type:'post', url:'/CampaignOrderRelations/save', data:{id:COId}, success:function(data){ } }); } $("#FromID").valid()就是jquery validate 的验证

JavaWeb开发中form、ajax提交数据Model转化

JavaWeb开发中form.ajax提交数据Model转化 问题 最近学习MongoDB数据库,作为java开发的我,当然需要做个小的web程序来测试一番了.在html中我采取ajax提交方式,因为我要模拟各种类型的数据,基础数据类型.数组.对象等.然而,最终发现了个不同的地方:Form和ajax提交数据,在HttpServletRequest中尽然参数名有所不同. 数据类型 form ajax 基础数据 para=value para=value 数组 para[]={"aaa",

jquery序列化form表单使用ajax提交后处理返回的json数据

这篇文章主要介绍了jquery序列化form表单,使用ajax提交后处理返回的json数据的示例,需要的朋友可以参考下 1.返回json字符串: ** 将一个字符串输出到浏览器 */    protected void writeJson(String json) {        PrintWriter pw = null;        try {            servletResponse.setContentType("text/plain;charset=UTF-8"

Django—Form两种保留用户提交数据的方法

用户在网页上进行表单填写时,有可能出现某项填写错误.一般情况下,用户在未发觉错误的情况下点击提交,则此表单的内容会清空,用户不得不再重新填写,这样的用户体验是及其糟糕的. 在此,我们有2种方法将用户的输入保存下来,一旦填写错误,只需要将错误项修改即可重新提交. 一.利用Form生成Html标签 1. views.py 1 from django.shortcuts import render, HttpResponse, redirect 2 from django.forms import F

django 的form组件(验证原理的流程)--2

功能 - 用户数据提交进行验证 - Form提交:提交后,内容会清空,会刷新浏览器 1.通过写类(继承Forms) 字段名 == xx.filed()这个字段本质就是验证正则,正则表达式 字段名 == xx.filed()这个字段本质就是验证正则,正则表达式 字段名 == xx.filed()这个字段本质就是验证正则,正则表达式 2.obj = logForm(request.post) 3.obj.is_valid() 4.obj.cleaned_data 5.obj.errors - Aja

jQuery 中 ajax 提交数据应用的一个小demo

举一个jquery中ajax的应用小 demo 便于以后的更多项目拓展 ,这里要注意的是保存的文件名问题 ... ajax02.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="form&qu

解决部分浏览器ajax提交数据,数据已改变,却后台数据接收数据还是上一次值的问题

最近在工作中遇到了QQ浏览器ajax提交数据,表单数据改变,却后台数据接收数据还是上一次值的问题,但是在其它浏览器中是正常的. 代码如下: $.ajax({ url : "<%=path%>/secretkey/uploadKey", async:false, type : 'post', data : { merKey : $('#merKey').val(), keyType : $('#keyType').val(), type : $('#type').val()

ajax提交数据问题

加入traditional:true属性 traditional 类型:Boolean 如果你想要用传统的方式来序列化数据,那么就设置为 true.请参考工具分类下面的 jQuery.param 方法. $.ajax({ type: "POST", url: url, traditional:true, data:{ data:[0,1] }, dataType: "json", async:false }); ajax提交数据问题

AJAX提交数据成功但不会跳转页面

HTML页面通过ajax提交数据成功,但是会执行多次success方法,不会跳转到指定页面 解决办法;把button的type改为button即可 1 <button type="button" id="addBtn" class="btn btn-primary btn-lg">添加</button> 2 3 <script type="text/javascript"> 4  $(&qu