最后访问页面的Flask列表AttributeError:'Nonetype'对象没有属性'set_cookie'

时间:2017-08-22 11:29:39

标签: python flask

我正在尝试使用会话列出最后访问过的页面。我一直收到错误AttributeError: 'Nonetype' object has no attribute 'set_cookie' 我认为@app.after_request部分是原因,但我不知道如何解决它。

Python代码

@app.route('/')
def index():
    session['urls'] = []

    data = []
    if 'urls' in session:
        data = session['urls']

    timestamp = None

    t = time.strftime("%H:%M:%S")
    (h, m, s) = t.split(':')
    result = int(h) * 3600 + int(m) * 60 + int(s)

    if 0 <= result < 43200:
        timestamp = 'Goedemorgen'
    elif 43200 <= result < 64800:
        timestamp = 'Goedemiddag'
    elif 64800 <= result:
        timestamp = 'Goedeavond'

    resp = make_response(render_template('index.html', timestamp=timestamp, data=data))
    resp.set_cookie('visited', 'visited', expires=datetime.datetime.now() + datetime.timedelta(days=2))
    return resp


@app.after_request
def store_visited_urls(self):
    session['urls'].append(request.url)
    if(len(session['urls']) > 5):
        session['urls'].pop(0)

2 个答案:

答案 0 :(得分:1)

AttributeError: 'Nonetype' object has no attribute 'set_cookie'

上述错误表示对象respNonetype,表示make_response正在返回None。 这会将我带到您的make_response函数,除了您通过它的参数外,它很好。

问题在于:

def index():
    session['urls'] = []

每当您调用'/'的请求时,您正在将sessions['url']初始化为空列表,因此数据在以下语句中也不会得到任何内容:

if 'urls' in session:
        data = session['urls']

您需要单独初始化sessions['url'],然后在index()函数中使用它。

话虽如此,我假设您已将app.secret_key设置为您的某个秘密密钥。

你的after_request看起来很好。

答案 1 :(得分:0)

这里的问题是你实际上需要在@app.after_request 的末尾返回响应对象

如果你不返回它,它不会将它发送回 Flask 以附加会话数据。

@app.after_request
def store_visited_urls(request):
    session['urls'].append(request.url)
    if(len(session['urls']) > 5):
        session['urls'].pop(0)
    return request