Как проверить, если имя пользователя уже занято? - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно проверить ввод имени пользователя в форме регистрации, используя javascript вместе с flask в python, но я не знаю, как это реализовать.

Я должен использовать $.get в части JavaScript и в коде Python, который должен проверять и возвращать jsonifiedied истину или ложь.

Код 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 голосов
/ 01 августа 2019

Я думаю, вы должны написать это следующим образом:

@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)
0 голосов
/ 08 февраля 2019

Вы возвращаете истинное / ложное значение.В JavaScript это значение не будет строкой, с которой вы тестируете:

if (data == "FALSE")

При тестировании с фактическим логическим значением вы должны получить желаемый результат:

if (data == false)

или

if (!data)
...