繁体   English   中英

如何创建类似于 current_user 的 function?

[英]How can I create a function similar to current_user?

在 Flask 中,我想了解如何创建一个行为类似于current_user的 function,因为它无处不在(控制器和视图),但我很难真正知道要搜索什么来找到答案。

我能找到的关于 SO 的最接近的帖子是这个,但它是针对 Ruby而不是 Python,有人能指出我正确的方向吗? 谢谢!


到目前为止我所拥有的:

在我的__main__.py我有这个:

@app.context_processor
def foo_processor():
    def foo():
        return 'Hello World'

这样做的结果是我可以在我的 Jinja 模板中访问{{ foo }} ,而无需从我的 controller 发送它。 不幸的是,我无法within我的控制器中访问 foo,这也是我希望能够做到的。 我是否需要以某种方式导入它,如果需要,如何导入?

如果我理解正确,您需要一个可以在模板和控制器中使用的变量,而不必每次都将其传递给模板。 为此,首先,创建一个 function 来获取变量。 这可能类似于获取用户的设置。 然后在上下文处理器中,传递这个 function 的结果。 要在您的控制器中也访问它,请创建一个额外的变量来保存 getter 的值。 请注意,如果 function 返回不同的值,您可能需要调用 function 而不是使用变量。

# create a getter function, this returns the property's value.
def get_property():
  return "Test Text"

property = get_property() # this is only to make code pretty later on.

# the context processor passes the property to the templates.
@app.context_processor
def property_processor():
  return dict(property=get_property())

在您的控制器中,您可以访问之前创建的变量。

def view():
  if property == true:
    return redirect(url_for('index'))
  else:
    return redirect(url_for('access_denied'))

请注意,如果您的值会改变,您可能需要改用 function 并在每次渲染视图时调用 getter。 这将使第一个if语句变为if get_property() == true:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM