gpt4 book ai didi

google-app-engine - 如何将 collection_fields 从 api 请求传递给 @query_method 装饰器?

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:26 25 4
gpt4 key购买 nike

(这是在 github 上发布的关于很棒的 endpoints-proto-datastore 库的相同问题的副本)

我正在尝试实现我的 API,以便客户端可以在 api 请求中传递一个 '?fields=' url 参数,然后我可以指示查询构建响应并仅返回请求的 collection_fileds。

但是,我不知道如何将url参数传递给@query_method装饰器;这是我的代码:

@Contact.query_method(query_fields=('limit', 'order', 'pageToken'),
collection_fields=('name', 'birthday'),
path='contacts',
name='contacts.list')
def contacts_list(self, query):
return query

如何将请求中的 fields 参数传递给装饰器中的 collection_fields= 命名参数?

最佳答案

这个问题的答案有点类似于Simple Access API (Developer Key) with Google Cloud Endpoint (Python)

users_id_token.py , request 对象是一个解析传入请求的 ProtoRPC 对象。但是,即使实际用户没有指定键 'bearer_token''access_token' 作为 ProtoRPC 消息定义的一部分,如果它们在请求中传递作为查询参数,它们将存储在创建的 ProtoRPC 对象中。

为了访问它们,使用了一种不太为人所知的方法:

request.get_unrecognized_field_info(key)

为什么这很重要?要访问对象的 fields,我们假设 fields 属性是通过请求传入的。然后,如果您有一个解析为 my_message 的请求,您可以通过

访问 字段
my_message.get_unrecognized_field_info('fields')

ndb/model.pyquery_method 方法定义了一个局部范围的函数,称为 QueryFromRequestMethod。其中,直接创建了一个ProtoRPC对象:

request_entity = cls.FromMessage(request)

在你想用的地方

request_entity.get_unrecognized_field_info('fields')

我会建议

  1. 使用仅适用于您的用例的库的补丁版本
  2. 提交对库的修复,允许以轻量级方式在方法中进行此自定义
  3. 子类化 endpoints_proto_datastore.ndb.EndpointsModel 并覆盖 query_method 方法来执行您的特殊命令。

关于google-app-engine - 如何将 collection_fields 从 api 请求传递给 @query_method 装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com