Hallo,
ich möchte von einen externen Skript (Sensor) über TCP Daten an django senden.
Ich stelle mir das so vor, der Sensor ruft eine URL auf meldet sich an und sendet JSON daten.
jetzt kommt der schwirige Teil, wie mache ich das?
Ich müsste jetzt eigentlich eine ganz normale POST Abfrage in der view.py machen mit dem richigen URL-Eintrag.
Wie bekomme ich aber eine Anmelde Option für ein Externes Skript hin? Der müsste hier eine sichere Benutzer und Passwort abfrage machen, kann ich das irgendwie in TCP/IP einbinden?
gibt es einen intelligenteren Weg?
gruß
External Skript send Data via POST to Django
-
- User
- Beiträge: 510
- Registriert: Mittwoch 13. November 2019, 08:38
Das Stichwort dafür lautet REST API.
Entweder baust du das "zu Fuß" (z. B. https://stackabuse.com/creating-a-rest- ... th-django/) oder du verwendest ein Framework (z. B. https://www.django-rest-framework.org/), was mir sinnvoller erscheint als das Rad neu zu erfinden. Kommt aber immer auf den Anwendungsfall an.
Entweder baust du das "zu Fuß" (z. B. https://stackabuse.com/creating-a-rest- ... th-django/) oder du verwendest ein Framework (z. B. https://www.django-rest-framework.org/), was mir sinnvoller erscheint als das Rad neu zu erfinden. Kommt aber immer auf den Anwendungsfall an.
- noisefloor
- User
- Beiträge: 4151
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
und zum Senden der Daten kannst du das `requests` Modul nehmen. Das ist quasi DER Standard, wenn es um das senden eines HTTP-Requests geht.
Gruß, noisefloor
und zum Senden der Daten kannst du das `requests` Modul nehmen. Das ist quasi DER Standard, wenn es um das senden eines HTTP-Requests geht.
Gruß, noisefloor
Hallo Danke für die Antworten.
Ich bin mir unsicher ob das REST-Framework das richtige ist.
Ich habe eine ganze palete an Sensoren die Wollen ihre Daten an den Django Server senden.
Normalerweise würde ich das über UDP machen, so dass wenn mal ein Messwert nicht ankommt, die Welt nicht gleich untergeht.
Da die Sensoren jedoch unterschiedlich viele Werte senden, würde ich die gerne als JSON verpacken.
Mit REST müsste ich jetzt jedoch für jeden Sensor eine eigene API Schnittstelle erstellen oder?
Ich bin mir unsicher ob das REST-Framework das richtige ist.
Ich habe eine ganze palete an Sensoren die Wollen ihre Daten an den Django Server senden.
Normalerweise würde ich das über UDP machen, so dass wenn mal ein Messwert nicht ankommt, die Welt nicht gleich untergeht.
Da die Sensoren jedoch unterschiedlich viele Werte senden, würde ich die gerne als JSON verpacken.
Mit REST müsste ich jetzt jedoch für jeden Sensor eine eigene API Schnittstelle erstellen oder?
-
- User
- Beiträge: 510
- Registriert: Mittwoch 13. November 2019, 08:38
Über wie viele Messwerte pro welcher Zeit sprechen wir denn? Bzw. wie viele Requests?
@Metatron: Was sollen denn dei Daten im JSON-Format in einem CharField? Das hat ja nun gar keinen Vorteil. Postgres hat zwar entsprechende Felder, aber ich würde mir doch eher eine vernünftige Struktur überlegen, wie du die Daten speicherst. Und das hängt auch davon ab, wie du sie auswerten willst.
- noisefloor
- User
- Beiträge: 4151
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@Metatron: du musst in kleineren Schritten denken. Wenn ein Request ankommt, der im Body des Request JSON hat, dann musst du dir die Daten erstmal aus dem Request extrahieren. Die Daten sind im Objekt `request.body`. Dann kannst du die Daten in ein Python-Objekt (in dem Fall i.d.R. ein Dict) mit Hilfe des json Moduls wandeln und _dann_ kannst du damit was machen. Z.B. in die Datenbank schreiben. Das alles ist normalerweise mit ein paar Zeilen Code erledigt.
Gruß, noisefloor
@Metatron: du musst in kleineren Schritten denken. Wenn ein Request ankommt, der im Body des Request JSON hat, dann musst du dir die Daten erstmal aus dem Request extrahieren. Die Daten sind im Objekt `request.body`. Dann kannst du die Daten in ein Python-Objekt (in dem Fall i.d.R. ein Dict) mit Hilfe des json Moduls wandeln und _dann_ kannst du damit was machen. Z.B. in die Datenbank schreiben. Das alles ist normalerweise mit ein paar Zeilen Code erledigt.
Gruß, noisefloor