首页 > 解决方案 > TypeError:'dict'对象不可调用?

问题描述

我正在尝试构建我的第一个烧瓶应用程序,当我尝试从此表单发送登录数据时:

<form class="border border-light p-5" action="http://localhost:5000/login" method="POST">

    <p class="h4 mb-4 text-center">Connexion</p>
    <input type="email" id="defaultLoginFormEmail" class="form-control mb-4" placeholder="E-mail" name="username">
    <input type="password" id="defaultLoginFormPassword" class="form-control mb-4" placeholder="Mot de passe" name="password">
    <div class="d-flex justify-content-between">
    </div>
    ...
</form>

路线图:

@app.route('/login', methods=['POST'])
def UserLogin():
    credentials={}
    credentials['username'] = request.form['username']
    credentials['password'] = request.form['password']
    #I think that the problem in the 3 lines above
    current_user = UserModel.find_by_username(credentials['username'])
    if not current_user:
        return {'message': 'User {} doesn\'t exist'.format(credentials['username'])}

    if UserModel.verify_hash(credentials['password'], current_user.password):
        access_token = create_access_token(identity = credentials['username'])
        refresh_token = create_refresh_token(identity = credentials['username'])
        return redirect(url_for('search'))
    else:
        return {'message': 'Wrong credentials'}

当我尝试登录时,我得到:TypeError: 'dict' object is not callable.

按要求进行完整追溯:

Traceback (most recent call last):
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
    return self.finalize_request(rv)
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1630, in finalize_request
    response = self.make_response(rv)
  File "C:\Users\acer\Anaconda3\lib\site-packages\flask\app.py", line 1740, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "C:\Users\acer\Anaconda3\lib\site-packages\werkzeug\wrappers.py", line 921, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "C:\Users\acer\Anaconda3\lib\site-packages\werkzeug\test.py", line 923, in run_wsgi_app
    app_rv = app(environ, start_response)
TypeError: 'dict' object is not callable

标签: pythondictionaryflaskrequest

解决方案


您正在尝试返回 adict作为响应。- 尝试使用如下所示的东西。

from flask import jsonify

@app.route('/route')
def example():
    return jsonify({"your": "dict"})

推荐阅读