Seite 1 von 1

External Skript send Data via POST to Django

Verfasst: Montag 21. März 2022, 16:05
von Metatron
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ß

Re: External Skript send Data via POST to Django

Verfasst: Montag 21. März 2022, 16:41
von einfachTobi
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.

Re: External Skript send Data via POST to Django

Verfasst: Montag 21. März 2022, 19:48
von noisefloor
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

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 13:27
von Metatron
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?

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 13:31
von Sirius3
Wie Du die Schnittstelle gestaltest, ist allein Deine Sache. Wenn Du JSON verwenden willst, dann nimm JSON. Da kann es nur sein, dass Du für das Schreiben in Datenbanktabellen etwas mehr Code brauchst.

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 13:59
von einfachTobi
Über wie viele Messwerte pro welcher Zeit sprechen wir denn? Bzw. wie viele Requests?

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 14:00
von Metatron
einfach die json mittels REST in ein charfield übergeben?
zwischen alle 15 min und auch welche die jede Sekunde Daten senden
Wobei dann nicht alle Daten in der DB landen müssen

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 14:15
von sparrow
@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.

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 14:23
von Metatron
Ich möchte eine Standart API für jeden Sensor haben. Die Sensoren werden über ein Arduino ausgelesen und die Datenweitergesendet...

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 14:32
von sparrow
Joah, und was hat das mit der Datenbank zu tun?

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 14:41
von Metatron
das einige Sensorwerte in der DB gespeichert werden sollen.
Sorry ich verstehe die frage grade nicht

Re: External Skript send Data via POST to Django

Verfasst: Dienstag 22. März 2022, 14:52
von __deets__
Fuer sowas gibt es doch schon fertige Loesungen. FHEM, openHAB, etc. Warum das Rad neu erfinden?

Re: External Skript send Data via POST to Django

Verfasst: Mittwoch 23. März 2022, 20:29
von noisefloor
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