Я создаю HTTP API с использованием платформы сокола (https://falconframework.org/), сокола-autocrud (https://pypi.org/project/falcon-autocrud/) и аутентификации сокола (https://falcon-auth.readthedocs.io/en/latest/readme.html). В качестве сервера WSGI я использую gunicorn.
Когда я использую auto-crud , библиотека , кажется, полностью отклоняет тело пользовательских ресурсов для запросов POST (Это отлично работает с GET-запросами).
Я понял, что этого следует избегать, когда установлен декоратор jsonschema, как после просмотра исходного кода библиотеки я обнаружил источник "Invalid JSON body 'сообщение, которое я получаю при вызове моей конечной точки.
Примечание. Мой код запускается, когда я закомментирую каждую ссылку на autocrud
Мой ресурс:
class XYZResource(object):
@jsonschema.validate({})
def on_post(self, req, resp):
print(req.media)
resp.media = {}
Моя конфигурация сокола:
import falcon
from falcon_autocrud.middleware import Middleware
from falcon_auth import FalconAuthMiddleware, JWTAuthBackend
import falcon_jsonify
from sqlalchemy.orm import aliased
import jwt
import resources
from models import db_engine, User, Session
#auth_backend = JWTAuthBackend(user_loader=user_loader_jwt, secret_key="super secret key", auth_header_prefix="Bearer")
#auth_middleware = FalconAuthMiddleware(auth_backend)
app = falcon.API(
middleware=[
#Middleware(), # autocrud
#auth_middleware,
],
)
# app.add_route('/user', resources.UserCollectionResource(db_engine))
# app.add_route('/user/{username}', resources.UserResource(db_engine))
app.add_route('/xyz', resources.XYZResource)
Трассировка:
[2020-01-23 22:43:15 +0100] [63994] [INFO] Starting gunicorn 20.0.4
[2020-01-23 22:43:15 +0100] [63994] [INFO] Listening at: http://127.0.0.1:8000 (63994)
[2020-01-23 22:43:15 +0100] [63994] [INFO] Using worker: sync
[2020-01-23 22:43:15 +0100] [63998] [INFO] Booting worker with pid: 63998
[2020-01-23 22:43:16 +0100] [63998] [ERROR] Error handling request /xyz
Traceback (most recent call last):
File "/[2020-01-23 22:43:15 +0100] [63994] [INFO] Starting gunicorn 20.0.4
[2020-01-23 22:43:15 +0100] [63994] [INFO] Listening at: http://127.0.0.1:8000 (63994)
[2020-01-23 22:43:15 +0100] [63994] [INFO] Using worker: sync
[2020-01-23 22:43:15 +0100] [63998] [INFO] Booting worker with pid: 63998
[2020-01-23 22:43:16 +0100] [63998] [ERROR] Error handling request /xyz
Traceback (most recent call last):
File "/Users/fb/repositories/lister_backend_api/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/repository/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/repository/venv/lib/python3.7/site-packages/falcon/api.py", line 244, in __call__
responder(req, resp, **params)
TypeError: wrapper() missing 1 required positional argument: 'resp'
/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/repository/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/repository/venv/lib/python3.7/site-packages/falcon/api.py", line 244, in __call__
responder(req, resp, **params)
TypeError: wrapper() missing 1 required positional argument: 'resp'
После того, как я потратил последние две недели на эту помощь, любая помощь будет просто потрясающей! : -)