检查 Flask 中用户是否在线

Dew*_*rld 2 user-management flask flask-login

我正在构建一个直播应用程序。如果他/她在线,用户可以呼叫其他用户。我可以在用户登录时注册日志。不过,我正在寻找一种方法来检查用户是否退出/退出应用程序。欢迎任何建议。

ngS*_*.py 6

您可以使用Flask-SocketIO轻松监控这一点。使用它的优点是您可以实时监控。以下内容将会有所帮助:

项目目录

Project
|
|-> templates
|   |
|   |-> home.html
|   |-> login.html
|   |-> logout.html
|
|-> app.py
Run Code Online (Sandbox Code Playgroud)

应用程序.py

Project
|
|-> templates
|   |
|   |-> home.html
|   |-> login.html
|   |-> logout.html
|
|-> app.py
Run Code Online (Sandbox Code Playgroud)

首页.html

from flask import Flask, render_template
from flask_socketio import SocketIO, emit


app = Flask(__name__)
app.config['SECRET_KEY'] = 'SecretKey@123'
socket = SocketIO(app)


@app.route('/')
def index():
    return render_template('home.html')


@app.route('/login/<username>')
def login(username):
    '''
    When the user logs in.
    '''
    return render_template('login.html', username=username)


@app.route('/logout/<username>')
def logout(username):
    '''
    When the user logs out.
    '''
    return render_template('logout.html', username=username)


@socket.on('online')
def online(data):
    emit('status_change', {'username': data['username'], 'status': 'online'}, broadcast=True)


@socket.on('offline')
def online(data):
    emit('status_change', {'username': data['username'], 'status': 'offline'}, broadcast=True)


if __name__ == '__main__':
    socket.run(app)
Run Code Online (Sandbox Code Playgroud)

登录.html

<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
    var socket = io();
    socket.on('status_change', function(data) {
        console.log('Status changed: ', data)
    });
</script>
Run Code Online (Sandbox Code Playgroud)

注销.html

<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
    var socket = io();
    socket.emit('online', {'username': '{{username}}' });
</script>
Run Code Online (Sandbox Code Playgroud)

现在,使用上面的代码,您可以在两个选项卡中打开链接http://localhost:5000,在第一个选项卡中,如果您点击链接http://localhost:5000/login/A,则在第二个选项卡的控制台中你会看见,Status changed: {username: "A", status: "online"}。现在,在第一个选项卡中,如果您点击链接http://localhost:5000/logout/A,那么您将在第二个选项卡的控制台中看到Status changed: {username: "A", status: "offline"}

我希望这有帮助。