我需要检查使用javascript以及python中flask的注册表单中的用户名输入,但我不知道如何实现它。
我必须在JavaScript部分和python代码中使用$.get
,该代码应检查并返回jsonifyied true或false。
Python代码:
@app.route("/check", methods=["GET"])
def check():
"""Return true if username available, else false, in JSON format"""
username = request.args.get("q")
rows = db.execute("SELECT * FROM users WHERE username = :username", username=username)
if len(rows) >= 1 or len(username) < 1:
return jsonify(False)
else:
return jsonify(True)
HTML部分:
<form action="/register" method="post" id ="register">
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="username" placeholder="Username" type="text">
</div>
<div class="form-group">
<input class="form-control" name="password" placeholder="Password" type="password">
</div>
<div class="form-group">
<input class="form-control" name="confirmation" placeholder="Confirm Password" type="password">
</div>
<button class="btn btn-primary" id="submittion" type="submit">Register</button>
</form>
<script>
let input = document.querySelector('input[name=username]');
input.onkeyup = function() {
$.get('/check?q=' + input.value, function(data) {
if (data == "FALSE"){
data.preventDefault()
alert("Username is not available!");
}
});
};
</script>
一旦在SQL中检查了用户名,它便会警告用户。调试显示,它确实在列表中搜索了用户名,但没有警报或任何提示。
答案 0 :(得分:0)
您将返回一个true / false值。在JavaScript中,此值将不是要针对其进行测试的字符串:
if (data == "FALSE")
通过针对实际的布尔值进行测试,您应该获得所需的结果:
if (data == false)
或
if (!data)
答案 1 :(得分:0)
我猜你应该这样写:
@app.route("/check", methods=["GET"])
def check(username):
"""Return true if username available, else false, in JSON format"""
username = request.args.get("q")
rows = db.execute("SELECT * FROM users WHERE username = :username", username=username)
if len(username) < 1:
return jsonify(False), 400
if len(rows) < 1:
return jsonify(False), 400
else:
return jsonify(True), 200
和在javascript中
if (data == "FALSE")
到
if (data[1] == false)