首页 > 解决方案 > 烧瓶 request.args,无法正常工作

问题描述

我想使用request.args.get()我的数据并将其记录到控制台中。所以,我希望控制台记录{username: "ani", room: "1"},但它只是打印出来{username: "ani", room: ""}。这是我的 app.py-

from flask import Flask, render_template, request, redirect, url_for
from flask_socketio import SocketIO, join_room

app = Flask(__name__)
socketio = SocketIO(app)


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


@app.route('/chat')
def chat():
    username = request.args.get('username')
    room = request.args.get('room')

    if username and room:
        return render_template('chat.html', username=username, room=room)
    else:
        redirect(url_for('home'))


@socketio.on('join_room')
def handle_join_room(data):
    app.logger.info("{} has joined room {}".format(
        data['username'], data['room']))
    join_room(data['room'])
    socketio.emit('join_room_announcement', data)


if __name__ == '__main__':
    socketio.run(app, debug=True)

这是我的chat.html-

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Chat App</title>
  </head>
  <body>
    <h1>Welcome to room {{ room }}</h1>
    <div id="messages"></div>
    <form>
      <input type="text" placeholder="Enter your message here" />
      <button type="submit">Send</button>
    </form>
  </body>
  <script
    src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.1/socket.io.js"
    integrity="sha512-oFOCo2/3DtjrJG4N27BjSLQWoiBv171sK6a+JiWjp/7agxC2nCUP358AqzxkBUb5jX8g6CYLPdSKQTbC0weCwA=="
    crossorigin="anonymous"
  ></script>
  <script>
    const socket = io.connect('http://127.0.0.1:5000/');
    socket.on('connect', () => {
      socket.emit('join_room', {
        username: '{{ username }}',
        room: '{{ id }}',
      });
    });
    socket.on('join_room_announcement', (data) => {
      console.log(data);
    });
  </script>
</html>

它也在终端中执行此操作,说明ani has joined room何时应该说出房间 ID。

Welcome to {{ Room {{ room }}仍然可以在 chat.html 中使用,因为它向我显示了那里的房间 ID。请帮忙。如果您需要更多信息,可以发表评论。

标签: pythonflasksocket.io

解决方案


在您的 HTML 脚本块中,您尝试通过变量名称 id 访问房间,如下所示

room: '{{ id }}',

但是在烧瓶中,您将值设置为房间。所以在下面使用

room: '{{ room }}',

以上更改将解决 console.log 问题和终端日志记录问题。


推荐阅读