Flask对象20对象验证插件

0 投票
4 回答
901 浏览
提问于 2025-04-17 19:14

我正在尝试在flask框架中使用Validation jQuery插件。这是我的代码:

email: {
    required: true,
    email: true,
    remote: {
        url: $.getJSON($SCRIPT_ROOT + "/_check_mail"),  
         }              
},

这个请求应该发送到服务器,检查邮箱在数据库中是否已经存在,是或不是:

@app.route('/_check_mail')
def check_mail():
    mail = request.args.get('email')
    check = database.check_mail(mail)
    return check

如果邮箱不存在,check变量会是"True",如果邮箱已经存在,它会保存字符串"这个邮箱已经存在"。

但是,当我尝试将这个发送到服务器时,我收到了这个错误信息:

  • 请求网址:http://0.0.0.0:5000/[object%20Object]?email=arnoutaertgeerts%40gmail.com
  • 请求方法:GET
  • 状态码:404 找不到

我已经尝试了一些其他的方法,但都没有成功。有什么想法吗?

我觉得我可以用自定义的方法让它工作,但那样我就需要做一个同步的AJAX请求……

4 个回答

1

$SCRIPT_ROOT 可能没有定义。你需要自己明确地定义它。

来自 Flask 文档 :

<script type=text/javascript>
  $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
</script>

编辑:

你的代码有点神秘。$.getJSON 是 $.ajax 的一个简化版,只用来发送 GET 请求并接收 JSON 格式的响应。$.getJSON 返回的是 JavaScript 对象,而不是字符串。你到底是怎么向 check_mail 发送请求的呢?

示例代码如下:

$.ajax({
  type : 'GET',
  data : { email : /* argument to be supplied into `mail` var of flask's `check_email` view */ },
  url : $SCRIPT_ROOT + '/_check_email',
})
2

我怀疑你没有设置处理 [object Object] 路由的处理程序。;-)

问题似乎在于 $SCRIPT_ROOT 实际上是某种 JavaScript 对象——确保你传给 getJSON 的最终 URL 是一个字符串(指向正确的接口)。

在你确认访问了正确的接口后,还需要确保返回的是有效的 JSON:

from flask import jsonify

# additional code

@app.route("/_check_mail")
def check_mail():
    # ... snip ...
    return jsonify(valid=check)
1

我终于解决了这个问题(这次是真的)

问题出在 .getJSON 这个方法上。这个方法其实是一个简化版的

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

而这个方法实际上已经被验证插件的远程调用使用了!

所以我实际上只需要做的就是:

email: {
    required: true,
    email: true,
    remote: {
        url: "_check_mail",
        data: {
            email: function() {
                return $("#email").val();
                }
            }
         }
    },

撰写回答