python/flask:如何在调用其他函数时运行函数

python/flask:如何在调用其他函数时运行函数,python,python-3.x,function,flask,binding,Python,Python 3.x,Function,Flask,Binding,我有一个函数叫做when\u login() 每当调用Flask login模块中的login\u user()函数时,我都需要运行它 顺序: 用户提供凭据 凭证通过身份验证步骤 auth是通过大量方法实现的 3.一旦用户被授权,调用login\u user() 4.[需要执行的步骤]:每当调用login\u user()时,在重定向之前对登录的用户调用名为when\u login()的函数 我无法编辑/重写login\u user()以在\u login()和程序功能时调用 此外,重写功

我有一个函数叫做
when\u login()

每当调用
Flask login
模块中的
login\u user()
函数时,我都需要运行它

  • 顺序:
  • 用户提供凭据
  • 凭证通过身份验证步骤
  • auth是通过大量方法实现的 3.一旦用户被授权,调用
    login\u user()
    4.[需要执行的步骤]:每当调用
    login\u user()
    时,在重定向之前对登录的用户调用名为
    when\u login()
    的函数

我无法编辑/重写
login\u user()
以在\u login()和程序功能时调用

此外,重写功能可能会导致应用程序速度减慢

一般来说:有没有一种方法可以在python中绑定函数而不编辑将调用的第一个函数?

这是一个flask应用程序,但我很高兴得到python范围的答案


我不确定这是否是你想要的,也许有一个具体的方法来做到这一点,但这里是我尝试过的

from flask_login import login_user as login_user__

def run_first(fun):
    def inner(*args):
        fun(*args)
        when_login() # add arguments you want for making this call
    return inner

def when_login(*args):
    print('processing something with args in when_login')

@run_first
def login_user(*args):
    print('login_user is running first')
    return login_user__(*args)

login_user() # call this however you normally use
输出:

login_user is running first
processing something with args in when_login
调用
login\u user
使其首先运行,然后在\u login
时运行
,您可以在print语句中注意到这一点


这并不要求您更改代码,在开始烧瓶过程之前在顶层添加此代码。

只是为了澄清,您总是希望登录时首先运行
,当您总是调用
login\u user
时?
login\u user()
首先运行,然后在登录时自动运行
这是一个很好的解决方法。。thanks@Abd-ElazizSharaf如果你找不到更好的解决方案,你可以将其标记为已接受这真的很有帮助,只是我在等着看是否有其他想法有时你会发现一个你无法解决的问题的答案是的,我应该提到“以后有更好的解决方案”,一定要接受最适合你的方式。在我看来,装饰者是最快的选择!但如果您需要对flask登录进行更多控制,您可以覆盖它,但这意味着您需要做更多的工作。我建议改用装饰器!