La vista de matraz genera TypeError: el objeto 'bool' no es invocable

Resuelto StefanE asked hace 10 años • 1 respuestas

Estoy intentando depurar una vista en mi aplicación Flask que devuelve un estado 500 con el error TypeError: 'bool' object is not callableen el rastreo. La vista llama login_userdesde Flask-Login luego regresa Truepara indicar que el inicio de sesión fue exitoso.

He depurado hasta app_iter = app(environ, start_response)y appahora es un valor booleano con el valor Trueen lugar del objeto de la aplicación Flask.

Traceback (most recent call last):
  File "D:\Python27\lib\site-packages\flask\app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "D:\Python27\lib\site-packages\flask\app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "D:\Python27\lib\site-packages\flask\app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "D:\Python27\lib\site-packages\flask\app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "D:\Python27\lib\site-packages\flask\app.py", line 1478, in full_dispatch_request
    response = self.make_response(rv)
  File "D:\Python27\lib\site-packages\flask\app.py", line 1577, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "D:\Python27\lib\site-packages\werkzeug\wrappers.py", line 824, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "D:\Python27\lib\site-packages\werkzeug\wrappers.py", line 57, in _run_wsgi_app
    return _run_wsgi_app(*args)
  File "D:\Python27\lib\site-packages\werkzeug\test.py", line 854, in run_wsgi_app
    app_iter = app(environ, start_response)
TypeError: 'bool' object is not callable
@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    user = User.query.filter_by(username=username).first()

    if user:
        login_user(user)
        return True

    return False
StefanE avatar Jan 28 '14 19:01 StefanE
Aceptado

En Flask, una vista debe devolver uno de los siguientes:

  • una cuerda
  • un Responseobjeto (o subclase)
  • una tupla de (string, status, headers)o(string, status)
  • una aplicación WSGI válida

Flask prueba las primeras 3 opciones y, si no encajan, asume que es la cuarta. Devolvió True en algún lugar y, en su lugar, se trata como una aplicación WSGI.

Consulte Acerca de las respuestas en la documentación.

Martijn Pieters avatar Jan 28 '2014 13:01 Martijn Pieters