python - 在 FastAPI 中避免重复的代码片段石墨烯
问题描述
如何避免在 FastAPI 应用程序中使用石墨烯在突变和类型之间重复代码片段?我需要允许用户输入他们想要的任何字段,然后生成未提供的其余部分。
graphql\mutations.py
import graphene
from models.customers import CustomerLogin, CustomerLogin_PydanticIn
from graphql.types import CustomerLoginType
class CreateUserMutation(graphene.Mutation):
class Arguments:
id = graphene.Int()
shard_id = graphene.Decimal()
seq_num = graphene.Decimal()
event_timedate = graphene.DateTime()
user_id = graphene.UUID()
device_token = graphene.UUID()
user_ip = graphene.String()
user_agent = graphene.String()
client_id = graphene.String()
process = graphene.String()
auth_result = graphene.String()
auth_fail_cause = graphene.String()
plain_email = graphene.String()
user = graphene.Field(CustomerLoginType)
@staticmethod
async def mutate(parent, info, customer: CustomerLogin_PydanticIn):
customer= await CustomerLogin.create(**customer.dict()) # save customer to db
return CreateUserMutation(id=customer.id)
graphql\types.py
import graphene
# Fields should coincide with model.customers.CustomerLogin
class CustomerLoginType(graphene.ObjectType):
id = graphene.Int()
shard_id = graphene.Decimal()
seq_num = graphene.Decimal()
event_timedate = graphene.DateTime()
user_id = graphene.UUID()
device_token = graphene.UUID()
user_ip = graphene.String()
user_agent = graphene.String()
client_id = graphene.String()
process = graphene.String()
auth_result = graphene.String()
auth_fail_cause = graphene.String()
plain_email = graphene.String()
graphql\queries.py
import graphene
from models.customers import CustomerLogin
from graphql.types import CustomerLoginType
class Query(graphene.ObjectType):
all_customer_logins = graphene.List(CustomerLoginType)
single_customer_login = graphene.Field(CustomerLoginType, id=graphene.Int())
@staticmethod
async def resolve_all_customer_logins(parent, info):
users = await CustomerLogin.all()
return users
@staticmethod
async def resolve_single_customer_login(parent, info, id):
user = await CustomerLogin.get(id=id)
return user
然后使用 TortoiseORM 的 ORM 模型
模型\客户.py
from tortoise import fields
from tortoise.contrib.pydantic import pydantic_model_creator
from tortoise.models import Model
from models.events import ShardID, SequenceNum
class CustomerLogin(Model):
shard_id: fields.ForeignKeyNullableRelation[ShardID] = \
fields.ForeignKeyField(model_name='models.ShardID',
related_name='customerlogin_shardid',
to_field='shard_id',
on_delete=fields.RESTRICT,
null=True)
seq_num: fields.ForeignKeyNullableRelation[SequenceNum] = \
fields.ForeignKeyField(model_name='models.SequenceNum',
related_name='customerlogin_seqnum',
to_field='seq_num',
on_delete=fields.RESTRICT,
null=True)
event_timedate = fields.DatetimeField(null=True)
user_id = fields.UUIDField(null=True)
device_token = fields.UUIDField(null=True)
user_ip = fields.CharField(256, null=True)
user_agent = fields.CharField(1024, null=True)
client_id = fields.CharField(256, null=True)
process = fields.CharField(256, null=True)
auth_result = fields.CharField(256, null=True)
auth_fail_cause = fields.CharField(256, null=True)
plain_email = fields.CharField(256, null=True)
CustomerLogin_Pydantic = pydantic_model_creator(CustomerLogin, name='CustomerLogin')
CustomerLogin_PydanticIn = pydantic_model_creator(CustomerLogin, name='CustomerLoginIn', exclude_readonly=True)
解决方案
推荐阅读
- python - 快速学习 Python 如何保护一些私有连接不被暴露
- git - “混帐添加
” 命令导致错误“致命:pathspec 'file_name' 不匹配任何文件 - java - 带有 Kotlin 的 LibGDX GWT/HTML:“没有可用于类型的源代码
,你忘了继承一个必需的模块吗?” - assembly - 执行期间在内存中复制
- firebase - “构建函数返回空值。有问题的小部件是:信息构建函数绝不能返回空值。要返回一个空白空间”
- ios - 在 Xcode 操场中作为 inputView 的 UITableView 中显示附件视图?
- sql-server - 如何将十六进制时间表字符串转换为日期时间格式
- eclipse - Jakarta XML Web 服务将在 Tomcat 7 上运行
- r - R Shiny reactiveValues() 更新
- android - 强制用户在 Android 中拥有最新的应用版本