重新启动后仍会出现Python烧瓶闪存消息异常

时间:2013-10-22 18:17:28

标签: python flask

我正在制作一个小瓶子应用程序,我有这样的东西:

@app.route('/bye')
def logout():
    session.pop('logged_in', None)
    flash('Adiós')
    return redirect('/index')

毋庸置疑,当我运行应用程序并导航到'/ bye'时,它给了我一个UnicodeDecodeError。好吧,现在它在每个扩展基本模板(呈现消息)的页面上都给了我相同的unicodedecodeerror,即使在重新启动应用程序之后也是如此。尽管在源代码中删除了闪存,但始终使用相同的dump()。我能想到的只是废话?请帮助。

我必须重新启动计算机以清除愚蠢的会话缓存或其他内容。

3 个答案:

答案 0 :(得分:14)

我认为flash()实际上会创建一个名为session ['_ flashes']的会话。请参阅此代码here。所以你可能要么:

clear/delete the cookie 

OR

session.pop('_flashes', None)

答案 1 :(得分:0)

Flask闪存将消息存储在会话cookie中,直到它们被成功“消耗”。 如果在这种情况下获得UnicodeDecodeError(https://wiki.python.org/moin/UnicodeDecodeError),则不会消耗消息,因此您会一次又一次地收到错误消息。

我的解决方案是从浏览器中删除cookie

由于我在使用本地化时遇到了问题,我现在通过安装我的翻译对象解决了原因:

trans = gettext.GNUTranslations(...)
trans.install(unicode=True)

在我的python源文件中使用UTF-8编码,在翻译文件中使用"Content-Type: text/plain; charset=UTF-8\n"(.pot)

答案 2 :(得分:0)

您正在使用非ascii字符串“adiós”,因此您需要确保python将字符串处理为unicode,而不是ascii。

将其添加到python文件的标头中。这将告诉编译器您的文件包含utf8字符串

#!/usr/bin/env python
# -*- coding: utf-8 -*-

因此您的代码将是这样的:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from flask import Flask
app = Flask()

@app.route('/bye') 
def logout():
    session.pop('logged_in', None)
    flash('Adiós')
    return redirect('/index')