【问题标题】:How to check if a username is already taken?如何检查用户名是否已被占用?
【发布时间】:2019-02-08 20:53:05
【问题描述】:

我需要使用 javascript 和 python 中的烧瓶检查注册表单中的用户名输入,但我不知道如何实现它。

我必须在 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 中检查用户名是否已经存在,它应该提醒用户。调试显示它确实在列表中搜索用户名,但它没有警告或任何东西。

【问题讨论】:

  • 欢迎来到 StackOverflow。如您所知,这是一个您将花费很长时间试图解决的代码中的问题的网站,作为最后的手段不得不寻求帮助。这不是代码编写服务。

标签: javascript python jquery html cs50


【解决方案1】:

您正在返回一个真/假值。在 JavaScript 中,此值不是您要测试的字符串:

if (data == "FALSE")

通过对实际布尔值进行测试,您应该得到您想要的结果:

if (data == false)

或

if (!data)

【讨论】:

  • 谢谢,但它仍然没有响应或显示任何内容。只要我写了一个存在并响应的用户名,它就会自动搜索
  • 能否提供返回的数据
  • 您可能会遇到错误,因为返回的 json 中不存在 data.preventDefault()。此外,您应该将第三个参数添加到 $.get,因为它可能不知道它是一个 json 值。
  • 数据错误... 您可以在浏览器网络选项卡中找到数据。 F12 -&gt; Network
【解决方案2】:

我猜你应该这样写:

@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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2021-11-04
    • 2018-03-13
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多