Flask对象20对象验证插件
我正在尝试在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 可能没有定义。你需要自己明确地定义它。
<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();
}
}
}
},