Flask view raises TypeError: ‘bool’ object is not callable

Posted on

Solving problem is about exposing yourself to as many situations as possible like Flask view raises TypeError: ‘bool’ object is not callable and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about Flask view raises TypeError: ‘bool’ object is not callable, which can be followed any time. Take easy to follow this discuss.

Flask view raises TypeError: ‘bool’ object is not callable

I am trying to debug a view in my Flask app that is return a 500 status with the error TypeError: 'bool' object is not callable in the traceback. The view calls login_user from Flask-Login then returns True to indicate that the login was successful.

I have debugged until app_iter = app(environ, start_response) and the app is now a boolean with the value True rather than the Flask app object.

Traceback (most recent call last):
  File "D:Python27libsite-packagesflaskapp.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "D:Python27libsite-packagesflaskapp.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "D:Python27libsite-packagesflaskapp.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "D:Python27libsite-packagesflaskapp.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "D:Python27libsite-packagesflaskapp.py", line 1478, in full_dispatch_request
    response = self.make_response(rv)
  File "D:Python27libsite-packagesflaskapp.py", line 1577, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "D:Python27libsite-packageswerkzeugwrappers.py", line 824, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "D:Python27libsite-packageswerkzeugwrappers.py", line 57, in _run_wsgi_app
    return _run_wsgi_app(*args)
  File "D:Python27libsite-packageswerkzeugtest.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
Asked By: StefanE

||

Answer #1:

In Flask, a view must return one of the following:

  • a string
  • a Response object (or subclass)
  • a tuple of (string, status, headers) or (string, status)
  • a valid WSGI application

Flask tests for the first 3 options, and if they don’t fit, assumes it is the fourth. You returned True somewhere, and it is being treated as a WSGI application instead.

See About Responses in the documentation.

Answered By: Martijn Pieters
The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.