【问题标题】:Python Flask - Setting a cookie using a decoratorPython Flask - 使用装饰器设置 cookie
【发布时间】:2016-01-01 16:35:40
【问题描述】:

我正在尝试编写一个装饰器来检查 cookie,如果它不存在则设置一个。这是我拼命想要传达这个想法的尝试。

def set_cookie(f):
    def decorated_function(*args, **kws):
        if 'cstc' in flask.request.cookies.keys():
            return make_response(f).set_cookie('cstc', value='value')
        else: 
            return f
    return decorated_function

@main.route('/home')
@set_cookie
def home():
    return render_template('main/home.html')

现在我遇到了错误:

TypeError: home() takes no arguments (2 given)

【问题讨论】:

    标签: python cookies flask


    【解决方案1】:

    你必须调用原来的函数:

    def set_cookie(f):
        def decorated_function(*args, **kws):
            response = f(*args, **kws)
            response = make_response(response)
            if 'cstc' in flask.request.cookies.keys():
                response.set_cookie('cstc', value='value')
            return response
        return decorated_function
    

    【讨论】:

    • 谢谢,但现在我收到此错误:BuildError: Could not build url for endpoint 'main.home'. Did you mean 'main.about' instead?
    【解决方案2】:

    您的装饰器应该如下所示:

    from functools import wraps
    
    def set_cookie(f):
        @wraps(f)
        def decorated_function(*args, **kws):
            #your code here
            return f(*args, **kws)
        return decorated_function
    

    你也可以看看官方的flask文档:http://flask.pocoo.org/docs/0.10/patterns/viewdecorators/

    【讨论】:

      【解决方案3】:
      from functools import wraps
      
      def set_cookie(f):
          @wraps(f)
          def decorated_function(*args, **kws):
                #your code here
                return f(*args, **kws)
          return decorated_function
      

      【讨论】:

      • 与@BBatista 评论重复
      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 2018-02-27
      • 2014-02-16
      • 2013-09-21
      • 1970-01-01
      • 2014-03-15
      • 2013-06-07
      • 2011-07-17
      相关资源
      最近更新 更多