"Missing 1 required positional argument: 'resp'"调用具有'self'参数的猎鹰资源响应程序时



我正在Windows上开发一个WSGI应用程序。我使用peewee(据说是不相关的(并且:

falcon==2.0.0
waitress==1.4.3

我的resources.py中有以下代码:

from models import Board
class BoardResource:
def on_get_collection(self, req, resp):
resp.media = Board.select()
def on_get(self, req, resp):
code = req.get_param('code')
resp.media = Board.get_by_id(code)

我的app.py中有以下代码:

import falcon
import models
from resources import BoardResource
def init():
models.init()
api = falcon.API()
api.add_route('/boards', BoardResource, suffix='collection')
api.add_route('/board', BoardResource)
return api
api = init()

我使用以下命令启动应用程序:waitress-serve app:api.当我从 API 请求/boards时,出现此错误:

ERROR:waitress:Exception while serving /boards
Traceback (most recent call last):
File "c:userspepsiman.virtualenvshsech-apilibsite-packageswaitresschannel.py", line 349, in service
task.service()
File "c:userspepsiman.virtualenvshsech-apilibsite-packageswaitresstask.py", line 169, in service
self.execute()
File "c:userspepsiman.virtualenvshsech-apilibsite-packageswaitresstask.py", line 439, in execute
app_iter = self.channel.server.application(environ, start_response)
File "c:userspepsiman.virtualenvshsech-apilibsite-packagesfalconapi.py", line 269, in __call__
responder(req, resp, **params)
TypeError: on_get_collection() missing 1 required positional argument: 'resp'

我决定从on_get_collection的定义中删除self参数,错误就消失了。我知道self一定在那里,不知道为什么它不能那样工作。有什么想法如何解决吗?

我自己发现了问题:调用api.add_route时,确实必须实例化响应器类,因此以下行:

api.add_route('/boards', BoardResource, suffix='collection')
api.add_route('/board', BoardResource)

需要像这样修改:

api.add_route('/boards', BoardResource(), suffix='collection')
api.add_route('/board', BoardResource())

当然,它无需从定义中删除self参数即可工作。

我希望我的这个愚蠢的错误能帮助某人修复他们的错误。

最新更新