2401_83940696 2024-07-23 20:59 采纳率: 2.1%
浏览 1
已结题

为什么不显示错误信息?

以下是我的代码,前端页面上为什么不显示短信验证码空缺的信息?
前端代码

<html>
<head>
    <meta http-equiv="content-type" content="text/html;
    charset=UTF-8">
    <meta name="viewport" content="width=device-width,
    initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>注册</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css'%}">
    <link rel="stylesheet" href="{% static 'plugins/font-awesome-4.7.0/css/font-awesome.css'%}">
    <link rel="stylesheet"
          href="{% static 'plugins/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css'%}">
</head>
<body>
<div class="account">
    <h2 style="text-align:center;">用户注册</h2>
    <form id="regForm" method="POST" style="margin-top:20px;" novalidate>
        {% csrf_token %}
        {% for field in form %}
        {% if field.name == 'code' %}
        <div class="form-group" style="margin-top:20px;">
            <label> {{ field.label}}</label>
            <div class="clearfix">
                <div class="col-md-6" style="padding:0;">{{field}}</div>
                <div class="col-md-6"><input id="btnSms" type="button" class="btn btn-default" value="点击获取验证码"></div>
            </div>
            <span class="error-msg" style="color:red;position:absolute"></span>
        </div>
        {% else %}
        <div class="form-group" style="margin-top:20px;">
            <label> {{ field.label}}</label>
            {{field}}
            <span class="error-msg" style="color:red;position:absolute"></span>
            {% endif %}
            {%endfor%}

        <input id="btnSubmit" style="height:35px;width:200px; margin-left:90px; font-size:17px;" type="button" value="注册"
                       class="btn btn-info">

            <div>
                 <span style="float: right; margin-top:20px;">已有账号.<a style=" text-decoration:none;" href=" ">去登录</a ></span>
            </div>
        </div>
    </form>

</div>
<script src="{% static 'js/jquery-3.5.1/jquery-3.5.1.min.js'%}"></script>
<script>
    //页面加载完自动执行函数
    $(function(){
        bindClickBtnSms();
        bindClickSubmit();
        });

    //点击提交注册
        function bindClickSubmit() {
            $('#btnSubmit').click(function(){
                $(".error-msg").empty();
                //收集数据
                //发送到后台
                $.ajax({
                    url:"/register/",
                    type:"post",
                    data:$('#regForm').serialize(),
                    dataType:"json",
                    success:function(res){
                        if(res.success){
                            location.href=res.data;
                       }else{
                        //错误信息
                        $.each(res.error,function(key,value){
                            $('#id_'+key).next().text(value[0]);
                            })
                        }
                    }
                })
            })
        }
</script>
</body>
</html>


后端代码

class RegisterForm(BootStrapModelForm):
    password = forms.CharField(
        label="密码",
        widget=forms.PasswordInput(),
        min_length=8,
        max_length=20,
        error_messages={
            'min_length': "密码长度不能小于8个字段",
            'max_length': "密码长度不能大于20个字段",
        })
    confirm_password = forms.CharField(label="确认密码", widget=forms.PasswordInput())
    mobile = forms.CharField(label="手机号",
                             validators=[RegexValidator(r'^(1[3|4|5|6|7|8|9])\d{9}$', '手机号格式错误'), ])
    code = forms.CharField(label="短信验证码")

    class Meta:
        model = models.Username
        fields = ['username', 'email', 'password', 'confirm_password', 'mobile', 'code']


def register(request):
    """注册"""
    if request.method == 'GET':
        form = RegisterForm()
        return render(request, 'register.html', {'form': form})

    form = RegisterForm(data=request.POST)
    if form.is_valid():
        # 验证通过,写入数据库
        form.save()
        return JsonResponse({'success': True, 'data': '/login/'})
    return JsonResponse({'success': False, 'error': form.errors})


  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-23 21:13
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    根据你提供的代码和问题描述,这里是一些可能的原因和解决方案:

    1. 前端页面不显示短信验证码空缺的错误信息

      • 确保id_codeid属性在HTML中正确设置,因为JavaScript中使用了$('#id_code')来获取验证码输入框。
      • 检查是否有JavaScript错误阻止了代码的执行。打开浏览器的开发者工具查看控制台是否有错误信息。
    2. 后端验证逻辑可能没有正确触发

      • 后端代码中form.is_valid()应该在提交表单时触发验证逻辑。如果form.errors为空,则表示验证通过。
    3. 前端与后端的错误信息传递机制可能存在问题

      • 确保后端返回的错误信息格式与前端处理逻辑相匹配。前端代码中使用了res.error,所以后端应该返回一个错误对象。

    根据你提供的代码修改建议,这里有一些补充:

    • 在前端代码中,确保id_codeid属性与JavaScript中的选择器匹配。如果id_code不是输入框的id,请相应地修改JavaScript中的选择器。

    • 在后端代码中,使用form.errors.as_json()可以返回一个格式化的JSON字符串,其中包含了所有字段的错误信息。这将使得前端更容易地解析和显示错误信息。

    • 确保后端返回的错误信息中的字段名与前端输入框的name属性匹配,这样前端才能正确地将错误信息显示在相应的输入框旁边。

    • 你可能需要在前端添加一些逻辑来处理非字段特定的错误信息。例如,如果后端返回了一个通用错误信息,你可能需要在页面上显示一个全局的错误消息。

    • 检查网络请求是否成功发送并接收到响应。在$.ajax调用中添加error回调函数来捕获并显示网络请求错误。

    最后,确保你的前端和后端代码都已经更新并部署到服务器上,然后再次测试以查看问题是否得到解决。如果问题仍然存在,可能需要进一步调试来确定问题的根本原因。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月25日
  • 创建了问题 7月23日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?