此应用程序建立在Flask
之上,我目前正在该位置上使用用户重置密码功能。这被定义为客户发布请求的一种变体。
客户将提供其密码进行验证,然后向他发送电子邮件,并且该变异将返回UserField
标量类型。
此外,我正在使用marshmallow
库对数据进行序列化。
models.py
class User(db.model):
__tablename__ = 'users'
name = db.Column(db.Boolean)
email = db.Column(db.Unicode, unique=True, nullable=False)
credit_account = db.Column(db.Numeric(precision=12, scale=2), default=0)
serializers.py
class UserSerializer(Schema):
name = fields.String()
email = fields.String()
credit_account = fields.Decimal() # Decimal types here!!!
注意:UserSerializer上有一个十进制字段,这是graphql的根本问题
下面的代码是GraphQL
突变的实现。我们将graphene
库用于python。
fields.py
class UserField(Scalar):
@staticmethod
def serialize(user):
json = UserSerializer()
return json.dump(user).data
@staticmethod
def parse_literal(node):
pass
@staticmethod
def parse_value(value):
pass
mutations.py
class ResetUserPassword(graphene.Mutation):
user = graphene.Field(UserField)
def mutate(self, info, password):
user = get_user(password=password)
send_email(user=user,email=user.email, template='reset_password_template')
return ResetUserPassword(user=user)
用法:
{
"query": "mutation { resetPassword(password: \"foobar\") { user }}"
}
现在,我在控制台上收到此TypeError提示:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('0.00') is not JSON serializable