External Skript send Data via POST to Django

Django, Flask, Bottle, WSGI, CGI…
Antworten
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

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ß
einfachTobi
User
Beiträge: 491
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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
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
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

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?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Über wie viele Messwerte pro welcher Zeit sprechen wir denn? Bzw. wie viele Requests?
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

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
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

@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.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

Ich möchte eine Standart API für jeden Sensor haben. Die Sensoren werden über ein Arduino ausgelesen und die Datenweitergesendet...
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Joah, und was hat das mit der Datenbank zu tun?
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

das einige Sensorwerte in der DB gespeichert werden sollen.
Sorry ich verstehe die frage grade nicht
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Fuer sowas gibt es doch schon fertige Loesungen. FHEM, openHAB, etc. Warum das Rad neu erfinden?
Benutzeravatar
noisefloor
User
Beiträge: 3856
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
Antworten