如何检查用户名是否已被占用?

时间:2019-02-08 20:53:05

标签: javascript python jquery html cs50

我需要检查使用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中检查了用户名,它便会警告用户。调试显示,它确实在列表中搜索了用户名,但没有警报或任何提示。

2 个答案:

答案 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)