Python+;FlaskRESTAPI,如何在camelcase和snakecase之间转换数据密钥?
我正在学习Python,并使用micro framework编写简单的REST API 我将用于对象关系映射和对象序列化/反序列化 我使用snakecase作为变量名(根据) 当从前端(角度)接收数据时,我需要将JSON对象键从camelcase转换为snakecase,反之亦然,当返回响应数据时 使用烧瓶进行此操作的最佳方法是什么Python+;FlaskRESTAPI,如何在camelcase和snakecase之间转换数据密钥?,python,flask,camelcasing,snakecasing,Python,Flask,Camelcasing,Snakecasing,我正在学习Python,并使用micro framework编写简单的REST API 我将用于对象关系映射和对象序列化/反序列化 我使用snakecase作为变量名(根据) 当从前端(角度)接收数据时,我需要将JSON对象键从camelcase转换为snakecase,反之亦然,当返回响应数据时 使用烧瓶进行此操作的最佳方法是什么 我在互联网上找不到一个好答案。您不需要转换钥匙,因为您不需要转换钥匙。数据不是代码,JSON中的键不是变量。他们不受PEP8的约束,你也不会将他们转化 如果您对JS
我在互联网上找不到一个好答案。您不需要转换钥匙,因为您不需要转换钥匙。数据不是代码,JSON中的键不是变量。他们不受PEP8的约束,你也不会将他们转化 如果您对JSON对象键有一个约定,那么无论在前端还是后端,都要遵守它。然后使用Marshmallow 3.x参数作为字段,在加载和转储时设置JSON文档中的键名 例如 如果您想为所有字段自动执行此操作,您可以提供自己的,以便从字段名生成
数据\u键
值:
import re
from functools import partial
from marshmallow import Schema
_snake_case = re.compile(r"(?<=\w)_(\w)")
_to_camel_case = partial(_snake_case.sub, lambda m: m[1].upper())
class CamelCasedSchema(Schema):
"""Gives fields a camelCased data key"""
def on_bind_field(self, field_name, field_obj, _cc=_to_camel_case):
field_obj.data_key = _cc(field_name.lower())
棉花糖文档的示例部分有一个示例
如果您使用的是Marshmallow 2.x,那么需要设置两个参数:and。您对Flask API或转换实现有问题吗?您还可以举出一些正确转换的例子吗?现在文档中有一个自动驼峰键的配方:
import re
from functools import partial
from marshmallow import Schema
_snake_case = re.compile(r"(?<=\w)_(\w)")
_to_camel_case = partial(_snake_case.sub, lambda m: m[1].upper())
class CamelCasedSchema(Schema):
"""Gives fields a camelCased data key"""
def on_bind_field(self, field_name, field_obj, _cc=_to_camel_case):
field_obj.data_key = _cc(field_name.lower())
>>> from marshmallow import fields
>>> class UserSchema(CamelCasedSchema):
... first_name = fields.String()
... last_name = fields.String()
...
>>> schema = UserSchema()
>>> schema.load({"firstName": "Eric", "lastName": "Idle"})
{'first_name': 'Eric', 'last_name': 'Idle'}
>>> schema.dump({"first_name": "John", "last_name": "Cleese"})
{'firstName': 'John', 'lastName': 'Cleese'}