-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
66 lines (48 loc) · 1.75 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from flask import Flask, render_template, request, session, redirect, url_for, flash
from flask_socketio import SocketIO, emit
from collections import deque
import datetime
import bleach
import secrets
app = Flask(__name__)
app.secret_key = secrets.token_hex(16)
socketio = SocketIO(app)
messages_cache = deque(maxlen=9999)
@app.route('/')
def index():
if 'user' not in session:
return redirect(url_for('login'))
user = session['user']
return render_template('index.html', user=user)
@app.route('/#', methods=['GET', 'POST'])
def login():
if 'user' in session:
return redirect(url_for('index'))
if request.method == 'POST':
if not request.form['user']:
flash('用户名不能为空')
return redirect(url_for('login'))
session['user'] = request.form['user']
add_message(f'用户{session["user"]}加入了房间!')
return redirect(url_for('index'))
return render_template('login.html')
@app.route('/logout')
def logout():
user = session.pop('user', None)
if user:
add_message(f'用户{user}退出了房间')
return redirect(url_for('login'))
def add_message(message):
messages_cache.append(message)
# 通知所有连接的客户端新的消息
socketio.emit('new_message', message)
@socketio.on('send_message')
def handle_send_message(message):
user = session.get('user', 'anonymous')
now = datetime.datetime.now().replace(microsecond=0).time()
# 使用 bleach 清理消息内容
cleaned_message = bleach.clean(message)
formatted_message = f'[{now.isoformat()}] {user}: {cleaned_message}'
add_message(formatted_message)
if __name__ == '__main__':
socketio.run(app, debug=False, allow_unsafe_werkzeug=True, port=5000)