gpt4 book ai didi

python - 为 Flask 中的 View 函数定义装饰器

转载 作者:行者123 更新时间:2023-12-01 05:08:55 25 4
gpt4 key购买 nike

我尝试在 Flask 中实现一个最小的登录系统,所以我定义了一个装饰器来检查 session 中的元素是否具有特定值,如果有,用户将无法访问该装饰器包装的页面.

这是包装的 View 函数:

@mustBelongToARoom
@app.route('/draw')
def draw():
return render_template('draw.html')

这是装饰器

def mustBelongToARoom(f):
@wraps(f)
def wrap_f(*args, **kwargs):
print 'test\n'
if session['room_name'] is None:
return render_template(url_for('/'))
return f(*args, **kwargs)
return wrap_f

因此,基本上,如果 room_nameNone,用户将无法访问 draw 页面。问题是它似乎忽略了装饰器添加的代码。例如,采用此版本的 mustBelongToARoom 装饰器:

   def mustBelongToARoom(f):
@wraps
def wrap_f(*args, **kwargs):
print 'test\n'
if session['room_name'] is None:
print '[DEBUG] you are not allowed to acces this page!\n'
return render_template(url_for('/'))
return f(*args, **kwargs)
return wrap_f

当用户尝试访问 draw 页面时,我希望在控制台中看到[DEBUG] you are not allowed to access this page!\n,但它不显示它。

最佳答案

尝试颠倒应用装饰器的顺序。路由装饰器仅添加了 draw() 函数,而不是 mustBelongToARoom 返回的函数,其中包含您的身份验证方案。

关于装饰器如何工作的一个很好的引用:How to make a chain of function decorators?

关于python - 为 Flask 中的 View 函数定义装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564549/

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