gpt4 book ai didi

python - 为授权编写 CherryPy 装饰器

转载 作者:太空狗 更新时间:2023-10-29 22:05:13 24 4
gpt4 key购买 nike

我有一个 cherrypy 应用程序,在某些 View 上,我想开始只允许某些用户查看它们,并将其他任何人发送到需要授权的页面。

有没有办法用自定义装饰器来做到这一点?我认为那将是最优雅的选择。

这是我想做的一个基本示例:

class MyApp:
@authorization_required
def view_page1(self,appID):
... do some stuff ...
return html

def authorization_required(func):
#what do I put here?

authorization_required 函数在作为装饰器调用时是否也可以接受像 allow_group1、allow_group2 这样的参数?还是每个组都需要一个单独的装饰器?

最佳答案

您真的不想为 CherryPy 编写自定义装饰器。相反,您想编写一个新工具:

def myauth(allowed_groups=None, debug=False):
# Do your auth here...
authlib.auth(...)
cherrypy.tools.myauth = cherrypy.Tool("on_start_resource", myauth)

参见 http://docs.cherrypy.org/en/latest/extend.html#tools进行更多讨论。与编写自定义装饰器相比,这有几个好处:

  1. 您可以从工具免费获得装饰器:@cherrypy.tools.myauth(allowed_groups=['me']),它已经知道如何不破坏 cherrypy.exposed功能。
  2. 您可以为每个处理程序(使用装饰器)、每个 Controller 树(通过 _cp_config)或每个 URI 树(在配置文件或字典中)应用工具。您甚至可以混合使用它们并通过装饰器提供基本功能,然后在配置文件中覆盖它们的行为。
  3. 如果配置文件关闭了您的功能,您不会因为调用装饰器函数只是为了查看它是否关闭而付出性能损失。
  4. 您会记得像所有内置工具一样添加“调试”参数。 ;)
  5. 通过选择不同的“点”,您的功能可以比自定义装饰器更早(或更晚,如果您需要)运行。
  6. 如果需要,您的功能可以在多个 Hook 点运行。

关于python - 为授权编写 CherryPy 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3302844/

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