TypeError:__call__() 只需一个参数(给了三个),但我其实只给了一个(Python-Flask 和 CouchDBKit)

1 投票
1 回答
2180 浏览
提问于 2025-04-18 01:49

我正在尝试让Flask和CouchDB一起工作,但由于一些不明原因,还是没能成功。

我刚开始了一个简单的应用程序,这样可以更容易地找到问题,但还是没有解决。

这是我的应用代码:

import datetime
from couchdbkit import *
from flask import Flask

app = Flask(__name__)

class Post(Document):
    title = StringProperty()
    content = StringProperty()

server = Server()
db = server.get_or_create_db('test')      
Post.set_db(db)

post = **Post.view('post/all')**

@app.route('/')
def index():
    return post

if __name__ == '__main__':
    app.run(debug=True)

这是Flask的调试输出:

TypeError: __call__() takes exactly 1 argument (3 given)

这是错误追踪信息:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request
    response = self.make_response(rv)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1577, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 824, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/test.py", line 854, in run_wsgi_app
    app_iter = app(environ, start_response)
TypeError: __call__() takes exactly 1 argument (3 given)

如果我在路由定义之外运行Post.view('post/all'),它是可以工作的……

我也试着逐行跟着官方教程,但我觉得这个教程可能过时了,或者作者假设我有他没有提到的模块……

1 个回答

2

你的视图没有返回字符串、元组或者WSGI响应。

Flask发现返回的不是字符串或元组,所以它尝试把这个当作WSGI响应来处理。这意味着它会用environstart_response这两个参数来调用你的视图。

你需要从你的index视图中返回一个有效的响应,而不是返回post对象。可以查看Flask快速入门中的关于响应的部分

你可能还想使用Flask-CouchDB集成包

撰写回答