[英]Python + Flask REST API, how to convert data keys between camelcase and snakecase?
我正在學習Python,並使用Flask微框架對簡單的REST API進行編碼。
我正在使用SQLAlchemy進行對象關系映射,並使用棉花糖進行對象序列化/反序列化。
我正在使用snakecase作為變量名(根據PEP8 )。
從前端(Angular)接收數據時,返回響應數據時,我需要將JSON對象鍵從駝峰式轉換為蛇形,反之亦然。
使用Flask進行此操作的最佳方法是什么?
我無法在互聯網上找到一個好的答案。
您不需要轉換密鑰,因為不需要。 數據不是代碼,JSON中的鍵不是變量。 它們不受PEP8的約束,並且您不進行轉換。
如果您對JSON對象鍵有約定,請在前端和后端的任何地方堅持使用。 然后,在字段中使用棉花糖3.x data_key
參數在加載和轉儲時在JSON文檔中設置密鑰名稱。
例如
class UserSchema(Schema):
first_name = fields.String(data_key="firstName")
last_name = fields.Email(data_key='lastName')
如果要針對所有字段自動執行此操作,則可以提供自己的Schema.on_bind_field()
實現,以從字段名稱生成data_key
值:
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'}
棉花糖文檔的示例部分有類似的配方 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.