簡體   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