1

我正在 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. /boards当我从 API请求时,我收到此错误:

ERROR:waitress:Exception while serving /boards
Traceback (most recent call last):
  File "c:\users\pepsiman\.virtualenvs\hsech-api\lib\site-packages\waitress\channel.py", line 349, in service
    task.service()
  File "c:\users\pepsiman\.virtualenvs\hsech-api\lib\site-packages\waitress\task.py", line 169, in service
    self.execute()
  File "c:\users\pepsiman\.virtualenvs\hsech-api\lib\site-packages\waitress\task.py", line 439, in execute
    app_iter = self.channel.server.application(environ, start_response)
  File "c:\users\pepsiman\.virtualenvs\hsech-api\lib\site-packages\falcon\api.py", line 269, in __call__
    responder(req, resp, **params)
TypeError: on_get_collection() missing 1 required positional argument: 'resp'

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

4

1 回答 1

2

我自己发现了问题:调用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从定义中删除参数的情况下工作。

我希望我的这个愚蠢的错误能帮助别人解决他们的错误。

于 2020-06-05T17:47:48.530 回答