2013-10-22 26 views
6

Sto facendo un piccolo pallone app in cui ho avuto qualcosa di simile:Python eccezione messaggio pallone flash rimane dopo il riavvio

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

Inutile dire che quando mi sono imbattuto l'applicazione e ho navigato a '/ bye' it mi ha dato un errore UnicodeDecode. Bene, ora mi dà lo stesso unicodedecodeerror su ogni pagina che estende il modello di base (che rende i messaggi) anche dopo il riavvio dell'applicazione. e sempre con lo stesso dump() nonostante la rimozione di quel flash nel codice sorgente. Tutto quello che riesco a pensare è quello che fa la merda? Aiuto per favore.

Bene, ho dovuto riavviare il computer per cancellare la cache della sessione stupida o qualcosa del genere.

risposta

12

Penso che flash() crei effettivamente una sessione chiamata session ['_ flashes']. Vedi questo codice here. Così si avrà probabilmente a uno:

clear/delete the cookie 

O

session.pop('_flashes', None) 
+0

Grazie, stava cercando così a lungo ed è stata così disperata, ha perso circa 5 ore .. anche se l'errore è stato risolto molto tempo fa. – Roman

0

Flask lampeggiante memorizza i messaggi in un cookie di sessione fino a quando non sono con successo "consumato". Se si ottiene un errore UnicodeDecodeError (https://wiki.python.org/moin/UnicodeDecodeError) in questo caso i messaggi non vengono consumati, quindi si ottiene l'errore più e più volte.

La mia soluzione era quella di eliminare il cookie dal browser

Da quando ho avuto il problema quando si utilizza la localizzazione, ho risolto la causa ora installando il mio oggetto di traduzione come:

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

e avendo UTF 8 codifica nei miei file di origine Python e "Content-Type: text/plain; charset=UTF-8\n" nel file di traduzione (.pot)

0

Si sta utilizzando una stringa non ascii "adiós", quindi è necessario assicurarsi che Python elabori le stringhe come unicode, non come ascii.

Aggiungi questo all'intestazione del file python. Questo dirà al compilatore che il file contiene stringhe utf8

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

così il vostro codice sarà qualcosa di simile:

#!/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') 
Problemi correlati