Это приложение построено поверх 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
Mutation. Мы используем библиотеку 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