抱歉,这是一个非常广泛的问题。
下面的代码是从网上找到的一些片段。我感兴趣的关键是以@protected 开头的行——我想知道这是做什么的以及它是如何做到的?它似乎在执行 do_upload_ajax 函数之前检查是否有有效用户登录。这看起来是一种非常有效的用户身份验证方法。我不明白这个@函数的机制 - 有人可以引导我朝着正确的方向解释这将如何在现实世界中实现吗?请 Python 3 回答。谢谢。
@bottle.route('/ajaxupload', method='POST')
@protected(check_valid_user)
def do_upload_ajax():
data = bottle.request.files.get('data')
if data.file:
size = 0
原文由 Duke Dougal 发布,翻译遵循 CC BY-SA 4.0 许可协议
好好 看看这个 巨大的答案/小说。这是我遇到过的最好的解释之一。
我能给出的最简短的解释是装饰器将您的函数包装在另一个返回函数的函数中。
这段代码,例如:
如果删除装饰器语法,将等效于此代码:
装饰器有时采用参数,这些参数被传递给动态生成的函数以改变它们的输出。
您应该阅读的另一个术语是 闭包,因为这是允许装饰器工作的概念。