2016-04-16 6 views
2

Как получить данные формы, отправленные в Flask с помощью веб-сокетов? Я получаю недопустимый заголовок фрейма в инструментах разработчика Google Chrome -> console.Как получить форму formData в фляге, отправленной с помощью websockets? Flask-SocketIO

Выписка из моего яваскрипта кода:

вар form_data = новый FormData ($ ('# my_form') [0]);

socket.emit ('handle_form', {data: form_data});

Как получить доступ, скажем, поле «название» в my_form из фляжки?

Request.Form бросает ту же ошибку «Неверный заголовок кадра»

Еще один вопрос, это хорошо, чтобы использовать веб-сокеты для отправки формы и в качестве полной замены для AJAX?

+0

поэтому при загрузке изображений, как сохранить файл в фляге? не удалось выполнить request.files.getlist(). Любое решение для этого? –

ответ

2

Вместо отправки объекта FormData, который является только конструкцией на стороне клиента, вы должны создать простой словарь и отправить его, так как все данные, которые передаются туда и обратно в Socket.IO, сериализуются в JSON.

Затем на сервере у вас будет диктофон, который отправляется в качестве аргумента в функцию обратного вызова сокета. См. Это example за идеи о том, как отправить данные формы на сервер.

+0

Как добавить файл, который будет загружен на javascript, чтобы к нему можно было получить доступ с помощью файла флагового файла? –

+0

Еще раз не думайте в терминах отправки формы, это вещь HTTP, которая не существует, когда вы работаете с WebSocket или SocketIO. Если вы хотите отправить файл, просто отправьте данные в вызов 'emit'. – Miguel

+0

То же самое, извините, я новичок, но не могу понять, как отправить файл в emit! Потому что при использовании ajax я использовал formData javascript. –

0

Не похоже Flask-SocketIO работ.

Когда вы socket.emit что-то, вы обрабатываете его обратным вызовом.

@socketio.on('handle_form') 
def handle_form_callback(data): 
    print('received message: ' + data) 

Вы не должны в данном случае request.form.

Он работает как замена формы, но я не думаю, что это хорошая замена. Веб-узлы не являются апатридами, они сложны в масштабировании и по существу связаны с сервером. Конечно, у него есть некоторые обходные пути, но это не похоже на очень хорошо документированное масштабирование HTTP-сервера.

+0

поэтому при загрузке изображений, как сохранить файл в фляже? не удалось выполнить request.files.getlist(). Любое решение для этого? –

+0

Можно отправить данные в виде двоичной строки через websocket, но я не рекомендую ее. Он не поддерживает такие функции, как многостраничная загрузка. Сделайте это с помощью простого HTTP POST. – iurisilvio

 Смежные вопросы

  • Нет связанных вопросов^_^