我现在正在为我的学习构建烧瓶项目,现在我有这样的员工简单模式(没有添加所有列名称):
class GenderChoices(enum.Enum):
M = 'M'
F = 'F'
def __str__(self):
return self.name
@staticmethod
def from_string(s):
try:
return GenderChoices[s]
except KeyError:
raise ValueError()
class Employees(db.Model):
___tablename___ = "employees"
emp_no = db.Column(db.Integer, primary_key=True)
gender = db.Column(db.Enum(GenderChoices, values_callable=lambda x: [str(member.value)
for member in GenderChoices]))
资源方面的基本论点,我是这样传递的:
parser.add_argument('gender',
type=GenderChoices.from_string,
help='This field cannot be blank',
required=True,
choices=list(GenderChoices))
当我这样展示我的回应时:
return {
'message': 'New Employee Has been created',
'Employee_Details': {
'employee_id': new_id,
'gender': data['gender']
}
}, 201
运行我的脚本来添加员工时运行良好,并且它也将数据存储在我的数据库中,但是在邮递员上显示我的结果时,我收到以下错误:
TypeError: Object of type GenderChoices is not JSON serializable
似乎有什么问题。
StrEnum
,其值无需任何操作即可更改。
class GenderChoices(enum.StrEnum):
M = 'M'
F = 'F'
JSONProvider
并在您的应用程序中使用它。以下示例扩展了 DefaultJSONProvider
。
from flask.json.provider import DefaultJSONProvider
class CustomJSONProvider(DefaultJSONProvider):
@staticmethod
def default(o):
if isinstance(o, enum.Enum):
return o.name
return DefaultJSONProvider.default(o)
app = Flask(__name__)
app.json_provider_class = CustomJSONProvider
app.json = CustomJSONProvider(app)