动态翻译 Pyramid 的视图参数
Dynamically translating Pyramid's view arguments
假设我有一个观点:
my_view(request: Request, uuid: UUID):
pass
我想自动将所有 uuid 对象转换为基于 base64 的字符串,这样框架用户就不需要手动调用 slug_to_uuid()
和 uuid_to_slug
。这将适用于所有视图,并且基于 Python 3 参数签名类型提示(如果它提示它是 UUID 对象,那么您希望将其转换为字符串并返回)。
route_url('viewname', uuid=my_uuid)
会将 UUID 参数编码为 base64 字符串
路由机制将读取视图函数的 Python 3 签名,并在调用视图之前将字符串转换回 UUID 对象
我可以在 Pyramid 中使用哪些钩子和方法?
挂钩到 route_url
在路由器中挂钩以使用自定义谓词、补间等转换传入的视图参数
使用functools.singledispatch
? https://docs.python.org/3/library/functools.html#functools.singledispatch
您询问的是 2 个工作流程。 1) 翻译传入的数据。 2) 在 url 秒内翻译输出数据。
在 Pyramid 中,传入数据的转换应该由装饰器、视图映射器或可能的谓词完成。您必须决定哪个最适合您的用例。 Tweens 没有意义,因为它们发生在 matchdict
之前。
就 url 代而言,route_url
唯一可用的挂钩是路线上的 [=12=],它可以接受 kwargs 并翻译它们。
假设我有一个观点:
my_view(request: Request, uuid: UUID):
pass
我想自动将所有 uuid 对象转换为基于 base64 的字符串,这样框架用户就不需要手动调用 slug_to_uuid()
和 uuid_to_slug
。这将适用于所有视图,并且基于 Python 3 参数签名类型提示(如果它提示它是 UUID 对象,那么您希望将其转换为字符串并返回)。
route_url('viewname', uuid=my_uuid)
会将 UUID 参数编码为 base64 字符串路由机制将读取视图函数的 Python 3 签名,并在调用视图之前将字符串转换回 UUID 对象
我可以在 Pyramid 中使用哪些钩子和方法?
挂钩到
route_url
在路由器中挂钩以使用自定义谓词、补间等转换传入的视图参数
使用functools.singledispatch
? https://docs.python.org/3/library/functools.html#functools.singledispatch
您询问的是 2 个工作流程。 1) 翻译传入的数据。 2) 在 url 秒内翻译输出数据。
在 Pyramid 中,传入数据的转换应该由装饰器、视图映射器或可能的谓词完成。您必须决定哪个最适合您的用例。 Tweens 没有意义,因为它们发生在 matchdict
之前。
就 url 代而言,route_url
唯一可用的挂钩是路线上的 [=12=],它可以接受 kwargs 并翻译它们。