2016-04-16 3 views
2

Zugriff auf Formulardaten, die über Web-Sockets an Flask gesendet werden? Ich erhalte in google chrome developer tools-> console einen ungültigen Frame-Header.Zugriff auf FormData in Flaschen, die mit Websockets gesendet werden Flask-SocketIO

Auszug aus meinem Javascript-Code:

var form_data = new Formdata ($ ('# my_form') [0]);

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

Wie würde ich zugreifen, sagen 'Titel' Feld in meiner_Form aus Flasche?

request.form führt die gleichen Fehler „Ungültige Frame-Header“

Noch eine Frage, ist es gut, Web Sockets für Formularübermittlung und als Gesamt Ersatz für Ajax zu benutzen?

+0

also beim Hochladen von Bildern, wie Sie die Datei in Kolben speichern? request.files.getlist() kann nicht ausgeführt werden. Irgendeine Lösung dafür? –

Antwort

2

Anstatt ein FormData-Objekt zu senden, das ein clientseitiges Konstrukt ist, sollten Sie ein einfaches Wörterbuch erstellen und senden, da alle Daten, die in Socket.IO hin und her übertragen werden, zu JSON serialisiert werden.

Dann auf dem Server haben Sie ein Diktat, das als Argument an Ihre Socket-Callback-Funktion gesendet wird. Informationen zum Senden von Formulardaten an den Server finden Sie unter example.

+0

Wie wäre es mit dem Hinzufügen der Datei, die zu Javascript hochgeladen werden soll, damit auf sie mit dem flask-Dateiobjekt zugegriffen werden kann? –

+0

Noch einmal, denken Sie nicht in Bezug auf die Formularübergabe, das ist eine HTTP-Sache, die nicht existiert, wenn Sie mit WebSocket oder SocketIO arbeiten. Wenn Sie eine Datei senden möchten, senden Sie die Daten einfach mit einem 'emit'-Aufruf. – Miguel

+0

Selbe Sache, tut mir leid, ich bin Anfänger, aber nicht in der Lage, herauszufinden, wie Sie Datei senden senden! Weil ich bei der Verwendung von Ajax formData von Javascript verwendet habe. –

0

Es ist nicht wie funktioniert.

Wenn Sie socket.emit etwas, behandeln Sie es mit einem Rückruf.

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

Sie haben keine request.form in diesem Fall.

Es funktioniert als Ersatz für Formularübertragung, aber ich denke nicht, dass es ein guter Ersatz ist. Websockets sind nicht zustandslos, sie sind schwer skalierbar und im Wesentlichen an einen Server gebunden. Natürlich gibt es einige Problemumgehungen, aber es ist nicht wie die sehr gut dokumentierte HTTP-Server-Skalierung.

+0

also beim Hochladen von Bildern, wie Sie die Datei in Kolben speichern? request.files.getlist() kann nicht ausgeführt werden. Irgendeine Lösung dafür? –

+0

Es ist möglich, Daten als binäre Zeichenfolge über Websocket zu senden, aber ich empfehle es nicht. Es werden keine Dinge wie Multipart-Upload unterstützt. Mach es mit einfachem HTTP POST. – iurisilvio

Verwandte Themen