annotations - 石墨烯:如何在查询执行之前添加一个函数?
问题描述
有没有办法在所有查询之前执行一个函数?
当我在查询类上方添加注释时,会出错
AssertionError: Type <function Query at 0x104d1dd30> is not a valid ObjectType.
def my_func(f):
@wraps(f)
def my_func_wrap(*args, **kwargs):
//do something
return f(*args, **kwargs)
return my_func_wrap
@my_func
class Query(graphene.ObjectType):
node = relay.Node.Field()
users = graphene.List(lambda: UserSchema)
def resolve_users(self, info):
//do something
return User.query.all()
schema = graphene.Schema(query=Query)
如果我将注释添加到每个解析器,它工作正常。
但我将添加 20 多个解析器,我认为向每个解析器添加注释并不是一个好主意。
解决方案
是的你可以。只需创建一个继承自GraphQLView
并覆盖dispatch
方法的自定义视图类,然后使用您自己的视图类作为 graphql 端点处理程序。像这样的东西:
class CustomGraphQLView(GraphQLView):
def dispatch(self, request, *args, **kwargs):
// do something
super(CustomGraphqlView, self).dispatch(request, *args, **kwargs)
如果您想操作查询集本身,我建议在其查询字段(,,...)类上使用并覆盖该方法,并使用您自己的自定义类graphene-django-extras
。list_resolver
DjangoFilterListField
DjangoFilterPaginateListField
您可以在覆盖方法上调用 super 或从其源中复制确切的代码并进行编辑。
推荐阅读
- java - if else 分支从未使用过
- php - 如何使用 Trashed Laravel 资源获取收藏
- python - pytorch克隆张量后如何计算grad
- javascript - 在 Mutation 中使用 GraphQL Args 属性
- python - 如何在python中将字符串变量转换为字节类型?
- php - 解析错误:语法错误,意外的 'foreach' (T_FOREACH),期待 ',' 或 ';' 在 C:\xampp\htdocs\policycode\sample_code\policy1.php 第 54 行
- progressive-web-apps - 渐进式网络应用程序 ios 推送通知?
- delphi - 非重叠串行端口在 CloseHandle 处挂起
- laravel - 在控制器 Laravel 中将权限渲染到 HTML
- xamarin - 如何在 Xamarin App 中为 Web API 提供登录身份验证?