我正在尝试使用会话列出最后访问过的页面。我一直收到错误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)
答案 0 :(得分:1)
AttributeError: 'Nonetype' object has no attribute 'set_cookie'
上述错误表示对象resp
有Nonetype
,表示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