Это немного тревожно, как многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ https://stackoverflow.com/a/15053443/2498188 на деньги, но только потому, что BufferedWriter()
не может бросить. Если бы это могло, то исключение оставило бы объект FileWriter
открытым.
Более общий способ сделать это, который не заботится о том, может ли BufferedWriter()
вызывать:
PrintWriter out = null;
BufferedWriter bw = null;
FileWriter fw = null;
try{
fw = new FileWriter("outfilename", true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
out.println("the text");
}
catch( IOException e ){
// File writing/opening failed at some stage.
}
finally{
try{
if( out != null ){
out.close(); // Will close bw and fw too
}
else if( bw != null ){
bw.close(); // Will close fw too
}
else if( fw != null ){
fw.close();
}
else{
// Oh boy did it fail hard! :3
}
}
catch( IOException e ){
// Closing the file writers failed for some obscure reason
}
}
Начиная с Java 7, рекомендуется использовать «попробовать с ресурсами» и позволить JVM справиться с этим:
try( FileWriter fw = new FileWriter("outfilename", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)){
out.println("the text");
}
catch( IOException e ){
// File writing/opening failed at some stage.
}
Спасибо за ваш ответ @Joe и @pjnola, как вы все предложили, я сослался на документы flask-login
Я обнаружил, что мы можем настроить класс анонимного пользователя, поэтому я настроил для мое требование,
Anonymous class
#!/usr/bin/python
#flask-login anonymous user class
from flask.ext.login import AnonymousUserMixin
class Anonymous(AnonymousUserMixin):
def __init__(self):
self.username = 'Guest'
Затем добавил этот класс в anonymous_user
login_manager.anonymous_user = Anonymous
Из этого он смог получить имя пользователя, если это был анонимный запрос.
AnonymousUserMixin не имеет атрибута имени пользователя. Вам нужно перезаписать объект и вызвать миксин. Взгляните на LoginManager.anonymous_user, который является объектом, который используется, когда ни один пользователь не вошел в систему.
Вы также должны получить пользователя откуда-то. Нет смысла хранить имя пользователя в g
, так как вы можете просто использовать current_user.username.
Если вы хотите получить имя пользователя, вам тоже понадобится
if current_user.is_authenticated():
g.user = current_user.username
Для этого потребуется, чтобы у объекта пользователя было свойство с именем username. Существует множество способов настроить использование Flask-Logins
. Я предлагаю перечитать документы и взглянуть на исходный код:
https://github.com/ maxcountryman / flask-login / blob / master / flask_login.py
Джо