TypeError:__call__() 只需一个参数(给了三个),但我其实只给了一个(Python-Flask 和 CouchDBKit)
我正在尝试让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响应来处理。这意味着它会用environ
和start_response
这两个参数来调用你的视图。
你需要从你的index
视图中返回一个有效的响应,而不是返回post
对象。可以查看Flask快速入门中的关于响应的部分。
你可能还想使用Flask-CouchDB集成包。