Как отследить текущего пользователя в flask-login?

Убедитесь, что поток полностью закрыт во всех сценариях.

Это немного тревожно, как многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ 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.
  }
17
задан Bear Brown 28 November 2018 в 08:51
поделиться

2 ответа

Спасибо за ваш ответ @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

Из этого он смог получить имя пользователя, если это был анонимный запрос.

16
ответ дан naga4ce 28 November 2018 в 08:51
поделиться

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

Джо

5
ответ дан Joe Doherty 28 November 2018 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: