簡體   English   中英

Python + Flask REST API,如何在駝峰和蛇形之間轉換數據密鑰?

[英]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'}

棉花糖文檔的示例部分有類似的配方

如果您使用的是棉花糖2.x,則需要設置兩個參數: load_fromdump_to

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM