Я просто пишу демо входа в колбу.

@app.route('/reg/', methods=['GET', 'POST'])
def reg():
    username = request.form.get('username').strip()
    password = request.form.get('password').strip()
    if (username == '' or password == ''):
        return redirect_with_msg('/regloginpage/', u'用户名或密码不能为空', category='reglogin')

    user = User.query.filter_by(username=username).first()
    if (user != None):
        return redirect_with_msg('/regloginpage/', u'用户名已存在', category='reglogin')

    salt = '.'.join(random.sample('0123456789abcdfeghijklmnABCDEFG', 10))
    m = hashlib.md5()
    str1 = (password + salt).encode('utf-8')
    m.update(str1)
    password = m.hexdigest()
    user = User(username, password, salt)
    db.session.add(user)
    db.session.commit()
    login_user(user)
    return redirect('/')

И Traceback, как это:

TypeError: 'int' object is not callable
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/apple/PycharmProjects/pinstagram/pinstagram/views.py", line 94, in login
login_user(user)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask_login/utils.py", line 140, in login_user
user_id = getattr(user, current_app.login_manager.id_attribute)()
TypeError: 'int' object is not callable

Это меня расстраивает, кто-то может меня спасти?

1
vainman 25 Апр 2017 в 08:10

2 ответа

Лучший ответ

Чтение сообщения об ошибке показывает, что ошибка происходит в строке 140 файла utils.py. Это, вероятно, потому что у вас есть

user_id = getattr(user, current_app.login_manager.id_attribute)()

() В конце заставляет вашу программу пытаться вызвать возвращаемое значение getattr как функции, когда это int. Удалите (), и это должно работать.

0
Alex von Brandenfels 25 Апр 2017 в 05:15

Я только что столкнулся с этой же проблемой при входе в систему и попал на этот вопрос. Хотя ответ @ Sweater-Baron намекает на проблему, вот прямое исправление в вашем User классе, поскольку редактировать Flask-Login не имеет смысла. Метод get_id() не должен быть объявлен как свойство:

@property
def get_id(self):
    return self.uid

В отличие от is_authenticated(), is_active() и is_anonymous().

def get_id(self):
    return self.uid

Из Flask-Login документации:

< Сильный > get_id ( )

Этот метод должен возвращать юникод, однозначно идентифицирующий этого пользователя, и может использоваться для загрузки пользователя из обратного вызова user_loader.

[Акцент мой]

1
dlasalle 15 Авг 2017 в 15:54