2016-09-27 4 views
-2

У меня есть метод, в котором я проверяю, существует ли пользователь в базе данных, и я хочу передать результаты этого метода другому методу, но я не могу этого сделать, ошибка Я вижу это «TypeError:„BOOL“объект не вызываемая»Не удается вернуть логическое значение из одного метода в другой

Вот мой код:

def userInDb(username, email, password): 
    cursor = mysql.get_db().cursor() 
    cursor.execute('SELECT userID from user WHERE userName = %s and email = %s and password = %s', [username, email, password]) 
    data = cursor.fetchone() 

    if data is None: 
     return False 
    else: 
     True 

И это, где я пытаюсь назвать результата метода aboves

@app.route('/showSignIn', methods=["POST"]) 
def showSignInPost(): 
    username = request.form['inputUserName'] # values received from the UI input by users 
    email = request.form['inputEmail'] 
    password = request.form['inputPassword'] 

    inDB == userInDb(username, email, password) 

    if inDB is True: 
     return render_template('signin.html', signInHeader = "User doesn't exist, please try again") 
    else: 
     return render_template('signin.html', signInHeader = "Welcome " + username) 

Спасибо в advanc е.

+0

Вам не хватает 'return' в этой ветке' else', но это не привело бы к возникновению ошибки, которую вы в настоящее время имеете. Я бы ожидал 'NameError' для' inDB'. Можете ли вы показать свою полную трассу –

+1

Также вы должны использовать одну строку '=' in 'inDB == userInDb (имя пользователя, адрес электронной почты, пароль) вместо двухзначных – valignatev

+0

@valentjedi yes, я заметил ошибку только после копирования кода. благодаря! – limeThyme

ответ

0

Вы забыли вернуть True

def userInDb(username, email, password): 
    cursor = mysql.get_db().cursor() 
    cursor.execute('SELECT userID from user WHERE userName = %s and email = %s and password = %s', [username, email, password]) 
    data = cursor.fetchone() 

    if data is None: 
     return False 
    else: 
     return True #you forgot return 

И вы тестируете inDB == userInDb(...) вместо назначения inDB = userInDb(...)

Также вы можете просто сделать if inDB: вместо if inDB is True:

И если вы сделаете это

def userInDb(username, email, password): 
    cursor = mysql.get_db().cursor() 
    cursor.execute('SELECT userID from user WHERE userName = %s and email = %s and password = %s', [username, email, password]) 
    data = cursor.fetchone() 

    return bool(data) # just return bool of data 

будет намного чище

+1

Они также протестировали 'inDB == userInDb (...)' вместо назначения и протестировали 'if inDB is True:' вместо просто 'if inDB:' (последнее не так, просто нахмурилось). – ShadowRanger

+0

Спасибо, теперь это работает. Я скорректировал другой метод, чтобы вернуть bool (данные) - не знал об этом трюке. Очень признателен. – limeThyme

+0

@limeThyme Добро пожаловать. Если это устранит ваши проблемы, отметьте эту запись как ответ, чтобы пользователи увидели, что этот вопрос больше не требует их помощи. –

Смежные вопросы