pythoneve:TypeError当我发送补丁和删除请求时

pythoneve:TypeError当我发送补丁和删除请求时,python,typeerror,eve,Python,Typeerror,Eve,我正在使用Eve制作RESTAPI。Eve在Nginx上运行,uwsgi在Docker容器上运行 Python版本:3.6.5 夏娃:0.8 炼金术:0.5.0 当我发送资源和项目的GET请求时,没有问题。 但是,当我发送补丁或删除请求时,API服务器将返回Nginx的默认50xError页面 日志如下所示: [pid: 12|app: 0|req: 22/22] 192.168.99.1 () {46 vars in 691 bytes} [Wed Jun 6 22:55:26 20

我正在使用Eve制作RESTAPI。Eve在Nginx上运行,uwsgi在Docker容器上运行

Python版本:3.6.5

夏娃:0.8

炼金术:0.5.0

当我发送资源和项目的GET请求时,没有问题。 但是,当我发送补丁或删除请求时,API服务器将返回Nginx的默认50xError页面

日志如下所示:

    [pid: 12|app: 0|req: 22/22] 192.168.99.1 () {46 vars in 691 bytes} [Wed Jun  6 22:55:26 2018] PATCH /maintenances/18 => generated 0 bytes in 11 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/eve/flaskapp.py", line 1043, in __call__
    return super(Eve, self).__call__(environ, start_response)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib64/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib64/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/lib/python3.6/site-packages/eve/endpoints.py", line 96, in item_endpoint
    response = patch(resource, **lookup)
  File "/usr/lib/python3.6/site-packages/eve/methods/common.py", line 297, in rate_limited
    return f(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/eve/auth.py", line 78, in decorated
    return f(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/eve/methods/common.py", line 1181, in decorated
    r = f(resource, **combined_args)
  File "/usr/lib/python3.6/site-packages/eve/methods/patch.py", line 41, in patch
    skip_validation=False, **lookup)
  File "/usr/lib/python3.6/site-packages/eve/methods/patch.py", line 134, in patch_internal
    original = get_document(resource, concurrency_check, **lookup)
  File "/usr/lib/python3.6/site-packages/eve/methods/common.py", line 80, in get_document
    **lookup)
TypeError: find_one() takes 3 positional arguments but 5 were given
当我从请求中删除身份验证时,服务器返回“请提供正确的凭据”,但当我从请求中删除“If Match”头时,服务器返回此错误。 (因此,身份验证和etag验证之间存在的某些过程可能是导致此错误的原因。

问题 这几乎肯定与Eve和Eve SQLAlchemy之间的版本不兼容有关。Eve SQLAlchemy 0.5只支持Eve 0.6,目前没有支持较新Eve版本的版本

这也与您看到的
TypeError
相匹配:
find_one()
是数据层中的一种方法,由Eve SQLAlchemy提供。接口可能在Eve 0.7或0.8中更改

从这里到哪里去
如果您使用的是pip,那么
pip check
应该会报告安装错误,因为Eve SQLAlchemy声明它依赖于
Eve>=0.6,您是否有任何更新或删除资源的事件挂钩?没有,但我使用的是Eve-SQLAlchemy。这个答案解决了我的问题。我为pip指定了Eve版本0.6.4(Eve==0.6.4)。没有类型错误,修补和删除请求成功。非常感谢。