抱歉,如果之前有人问过这个问题,我实际上找不到解决方案或类似的问题(可能使用了错误的词语)。
我正在更新现有的 Flask API,该 API 使用 marshmallow 和 peewee 从我们无法控制的客户端接收数据(无法更改 JSON 数据格式)。
数据格式是这样的:
{
"site_id": "0102931",
"update_date": "2018/02/11-09:33:23",
"updated_by": "chan1",
"crc": "a82131cf232ff120aaf00001293f",
"data": [{"num": 1,
"id": "09213/12312/1",
"chain": "chain2",
"operator": "0000122",
"op_name": "Fred",
"oid": "12092109300293"
},
{"num": 2,
"id": "09213/12312/2",
"chain": "chain1",
"operator": "0000021",
"op_name": "Melissa",
"oid": "8883390393"
}]
}
Run Code Online (Sandbox Code Playgroud)
我们对主块中的任何内容都不感兴趣,而是对 site_id 感兴趣,在反序列化以创建模型并存储数据时,必须将其复制到列表中的每个对象中。
这是 peeewee 中的模型:
class production_item(db.Model):
site_id = TextField(null=False)
id_prod = TextField(null=False)
num = SmallIntegerField(null=False)
chain = TextField(null=False)
operator = TextField(null=False)
operator_name = TextField(null=True)
order_id = …Run Code Online (Sandbox Code Playgroud) 我有一个在 Python 3.7 + Tornado 5 上运行的 REST API,使用 postgresql 作为数据库,使用带有 SQLAlchemy 核心的 aiopg(通过 aiopg.sa 绑定)。对于单元测试,我使用 py.test 和 pytest-tornado。
只要不涉及对数据库的查询,所有测试都会正常进行,我会得到这个:
运行时错误:任务 cb=[IOLoop.add_future..() at venv/lib/python3.7/site-packages/tornado/ioloop.py:719]> 将 Future 附加到不同的循环
相同的代码在测试中运行良好,到目前为止我能够处理 100 个请求。
这是@auth 装饰器的一部分,它将检查 JWT 令牌的 Authorization 标头,对其进行解码并获取用户数据并将其附加到请求中;这是查询的部分:
partner_id = payload['partner_id']
provided_scopes = payload.get("scope", [])
for scope in scopes:
if scope not in provided_scopes:
logger.error(
'Authentication failed, scopes are not compliant - '
'required: {} - '
'provided: {}'.format(scopes, provided_scopes)
)
raise ForbiddenException(
"insufficient permissions or wrong user."
)
db = self.settings['db'] …Run Code Online (Sandbox Code Playgroud)