————————————————— вопрос update2 ————————————————
Привет всем, мой вопрос исправлен. Спасибо Мигелю. его предложение очень полезно.
В мае обновление2 я забыл @ в моем маршруте: @socketio.on()
.
————————————————— оригинальный вопрос ————————————————
Я написал сервер с флягой, и мне нужен способ ajax моих данных, я выбрал socketio.
мой флодер такой:
/mysite
..runserver.py
....__init__.py
....views.py
../templates
....dice.html
в runserver.py
from mysite import app
from flask_socketio import SocketIO
socketio = SocketIO(app)
if __name__ == '__main__':
socketio.run(app)
in init .py
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
в просмотрах
from mysite import app,socketio
@app.route('/dice',methods = ['GET','POST'])
def dice():
return render_template('dice.html', form=form)
@socketio.on('DiceRequest',namespace='/dice')
def diceResult(message):
emit('DiceResult',{'data':message['data']})
в dice.html
<script>
$(document).ready(function () {
namespace = '/dice';
var socket = io.connect('http://localhost:' + '5000' + namespace);
socket.on('DiceResult', function (msg) {
$('#log').append('<br><input type="text">' + $('<div/>').text(msg.data).html());
});
$('form#emit').submit(function (event) {
socket.emit('DiceRequest', { data: $('#emit_data').val() });
return false;
});
});
</script>
<form id="emit" method="POST" action='#'>
<input type="text" name="emit_data" id="emit_data" placeholder="Message">
<input type="submit" value="Echo">
</form>
<h2>Receive:</h2>
<div id="log"></div>
я могу поймать данные http пакета вот так
REQUEST:
Request URL: http://localhost:5000/socket.io/?EIO=3&transport=polling&t=1555859308868-6&sid=7227db4c2a424529b365c70e631f7a89
Request Method: POST
Status Code: 200 OK
Remote Address: 127.0.0.1:5000
Referrer Policy: no-referrer-when-downgrade
HEADER:
Content-type: text/plain;charset=UTF-8
Origin: http://127.0.0.1:5000
Referer: http://127.0.0.1:5000/dice
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
DATA:
36:42/dice,["DiceRequest",{"data":"2"}]
RESPONSE:
HEADER:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://127.0.0.1:5000
Connection: close
Content-Type: text/plain
Date: Sun, 21 Apr 2019 15:08:29 GMT
Server: Werkzeug/0.15.2 Python/3.6.8
DATA:
OK
когда я устанавливаю точку останова в views.pydef diceResult (message) :, я не могу сломать свою программу. поэтому я думаю, что моя обратная точка не может получить мои данные.
———————————————— Вопрос update1 ————————————————
Я пытаюсь переписать свой код, как советует Мигель, но я все еще не могу получить данные. код здесь __init__.py
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
runserver.py
from mysite import app,socketio
socketio.run(app)
views.py
@app.route('/dice',methods=['GET','POST'])
def dice():
form = diceForm()
return render_template('dice.html',form=form)
socketio.on('DiceRequest',namespace='/dice')
def DiceResult(message):
emit('DiceResult',{'data':message['data']})
и мой dice.html
вот так
<head>
<script type="text/javascript" src="//code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
namespace = '/dice';
var socket = io.connect('http://localhost:' + '5000' + namespace);
socket.on('DiceResult', function (msg) {
$('#log').append('<br>' + $('<div/>').text('Received #' + msg.count + ': ' + msg.data).html());
});
$('form#emit').submit(function (event) {
socket.emit('DiceRequest', { data: $('#emit_data').val() });
return false;
});
});
</script>
</head>
<body>
<form id="emit" method="POST" action='#'>
<input type="text" name="emit_data" id="emit_data" placeholder="Message">
<input type="submit" value="Echo">
</form>
<h2>Receive:</h2>
<div id="log"></div>
</body>