Seite 1 von 2
Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 12:31
von Pitwheazle
Ich habe schon wieder was Neues:
Mein Rechentrainer soll ja in Zukunft auf Smartfones und Tablets verwendet werden und die haben nunmal keine Tastatur.
Meine Seite, auf der die Aufgaben dargestellt werden, habe ich in drei Bereiche aufgeteilt und diese mittels "justify-content: space-between;" aufgeteilt. Oben steht die Aufgabe und unten befindet sich das Eingabefeld und in der Mitte findet sich eine Grafik - wenn vorhanden. Da die Aufgaben meistens keine Grafiken haben, ist die Mitte meistens leer. Das Eingabefeld befindet sich aber so immer an der gleichen Stelle. Jetzt ist meine Überlegung, ob das sinnvoll ist. Zur Eingabe benötigt man ja nun mal eine Bildschirmtastatur. Leider kann ich nicht ausprobieren, wo die platziert wird. Ich finde auch in keinem Django Buch oder Tutorium einen Hinweis, wie damit umgegangen wird und auch googeln hat bisher nicht geholfen. Mit "Bildschirmgröße testen" kann ich zwar alle möglichen Geräte simulieren, aber keine Bildschirmtastaur
Ich gehe ja davon aus, dass, sobald der User auf ein Eingabefeld klickt, auf dem Smartfon bzw. Tablet eine Bildschirmtastur erscheint. Weiterhin gehe ich davon aus, dass ich Abhängigkeit meiner Form:
Code: Alles auswählen
class AufgabeFormZahl(forms.Form):
eingabe = forms.DecimalField(label='', max_digits=15,
decimal_places=5, widget=forms.NumberInput(attrs={'autofocus': True}))
class AufgabeFormStr(forms.Form):
eingabe = forms.CharField(label='', localize=True, widget=forms.TextInput(attrs={'autofocus': True}))
entweder eine Tastatur nur mit Zahlen, oder eine normale auftaucht. Das würde ich aber gerne mal ausprobieren. Ich besitze ein Surface Go, das ich als Tablet nutzen kann, aber auch da muss ich die Bildschirmtastatur manuell einblenden. Wenn, wie ich vermute, die Tastatur unterhalb meiner geplanten Anzeige auftaucht, macht meine Einteilung mit Eingabefeld unten und Mitte meistens frei keinen Sinn. Muss ich mein Projekt erst hochladen um das ausprobieren zu können?
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 12:39
von __deets__
Du kannst doch mit deinem smartphone im lokalen Netzwerk genauso arbeiten, einfach mit dem Rechner/der IP auf dem Django laeuft im Browser verbinden.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 12:47
von Pitwheazle
Ich muss noch viel lernen!
Also meine IP im Netzwerk? In meinem Fall. 192.168.178.21:8000 klappt nicht.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 12:49
von __deets__
Sollte schon. Muss natuerlich beides im gleichen WIFI Netzwerk sein, und dann kann da noch eine Firewall ne Rolle spielen, etc. Aber prinzipiell ist es deinem Telefon gleich, wo die Seite laeuft.
Sollest du (was ich mal nicht annehme) unter dem Mac unterwegs sein, gibt's natuerlich auch noch die iPhone-Simulatoren, die aus Xcode heraus laufen.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 12:50
von Pitwheazle
Mein Desktop PC ist nicht im WLAN, im gleichen Netz sind sie natürlich.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 12:54
von __deets__
Letztlich hat es irgendwas mit deinen lokalen Netzwerkeinstellungen zu tun. Die musst du halt klar kriegen, und dann geht das. ZB kann es sein, dass dein Router die Netze voneinander trennt.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 13:05
von Pitwheazle
Ich habe jetzt den lokalen Server auf meinem Surface gestartet (der ist im WLAN). Meine Fritzbox zeigt an, dass die Geräte (Surface, iPhone und iPad) miteinander kommunizieren dürfen. Klappt aber nicht. Hast du noch einen Tipp?
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 13:08
von __deets__
Vielleicht musst du deinen Server auch auf IP 0.0.0.0 starten. Nicht nur auf 127.0.0.1, sonst ist der von aussen nicht erreichbar. Keine Ahnung, wie Django da vorgeht. Unter Linux kann man mit netstat -lpn zB rausfinden, wer wo zuhoert. Und wenn da nur 127.0.0.1 bei port 8000 steht, dann reicht das nicht. Unter Windows bekommt man das bestimmt auch mit einem supi-dupi GUI-Tool raus

Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 13:40
von Pitwheazle
Ich bin zu blöd! Ich hatte die IP Adresse meines PCs angegeben und nicht 127.0.0.1:8000. Und jetzt .... geht es trotzdem nicht.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 13:50
von __deets__
Andersrum wird ein Schuh draus. 127.0.0.1 ist localhost. Das KANN nur auf dem Gerät selbst erreicht werden. Wenn der Server also nur darauf bindet, dann ist das per se nicht von außen erreichbar. Muss also auf 0.0.0.0 binden, damit es von überall erreichbar ist. Und natürlich darf auch keine Firewall den Zugriff von außen beschränken.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 14:33
von grubenfox
In der settings.py muss noch in der Liste ALLOWED_HOSTS die IP deines PCs (also der Rechner auf dem Django läuft) eingetragen werden.
Wenn ALLOWED_HOSTS eine leere Liste ist und DEBUG auf True ist dann nimmt er anstelle der leeren Liste diese: ['.localhost', '127.0.0.1', '[::1]']
Die Einträge sollten auch in der gefüllten ALLOWED_HOSTS-Liste stehen damit sich am gewohnten Verhaltne nichts ändert. Also bei dir dann in settings.py
Code: Alles auswählen
ALLOWED_HOSTS = ['192.168.178.21', '.localhost', '127.0.0.1', '[::1]']
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 14:36
von grubenfox
Damit antwortet Django eben auch wenn man ihn über eine URL mit 192.168.178.21 anfunkt. Ansonsten reagiert er nur auf localhost, 127.0.0.1 usw. und die funktionieren eben nur auf dem Rechner auf dem Django läuft.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 16:20
von Kebap
Pitwheazle hat geschrieben: Donnerstag 26. Januar 2023, 12:31
Mit "Bildschirmgröße testen" kann ich zwar alle möglichen Geräte simulieren, aber keine Bildschirmtastaur
Das mag daran liegen, dass diese Tastaturen ein eigenes Stück an Software sind, die der User auch auf seinem Gerät austauschen kann, also mitunter gibt es da viel Wildwuchs.
Du kannst dir übrigens auch einen Android Emulator auf dem PC installieren, um dort Handys zu simulieren, dann musst du nicht tatsächlich das Gerät wechseln, Router konfigurieren, usw.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 16:24
von Pitwheazle
Wahrscheinlich mache ich was falsch:
Unter settings.py habe ich "ALLOWED_HOSTS = ['192.168.178.21', '.localhost', '127.0.0.1', '[::1]'] " eingetragen und in der Adresszeile meines iPads "192.168.178.21:8000" - ist das so richtig? Da passiert nix "safari konnte Seite nicht öffnen, da der Server nicht mehr antwortet."
Anschließend habe ich den Server auf meinem surface gestartet (von wegen dem WLAN) und habe die .21 durch .34 ersetzt - auch nix.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 18:52
von LukeNukem
Pitwheazle hat geschrieben: Donnerstag 26. Januar 2023, 16:24
Unter settings.py habe ich "ALLOWED_HOSTS = ['192.168.178.21', '.localhost', '127.0.0.1', '[::1]'] " eingetragen und in der Adresszeile meines iPads "192.168.178.21:8000" - ist das so richtig?
In die ALLOWED_HOSTS gehört die IP-Adresse Deines Tablet und in die Adreßzeile Deines Tablet die IP-Adresse des Rechners, auf den Dein Django läuft, zudem Django mit "./manage.py runserver 0.0.0.0:8000" starten. HTH.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 19:10
von sparrow
@Pitwheazle:
Das sieht soweit richtig aus.
Fehlt der Eintrag in den ALLOWED_HOSTS und der Debug-Modus ist aktiv, bekommst du auch eine entsprechende Fehlermeldung, dass der Eintrag fehlt.
Du kannst auf dem Rechner auch erst einmal prüfen, ob es funktioniert.
Also per
starten und auf dem Rechner selbst mit 192.168.178.21:8000 darauf zugreifen, bevor du es von einem anderen Geräten versuchst.
Vorausgesetzt, 192.168.178.21 ist die IP deines PCs.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 19:17
von Pitwheazle
Prima! Es geht. Ich bekam aber noch den Hinweis, dass ich auch die IP-Adresse des Server eintragen muss. So jetzt gibt es mal ein Smiley für dich (sowas mache ich sonst eher nicht)

Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 19:23
von sparrow
Moment, was heißt die IP-Adrese des Servers?
Es muss quasi das in ALLOWED_HOSTS stehen, was du als Host Browser angibst.
Wenn du "
http://localhost" verwendest, dann muss "localhost" in den ALLOWED_HOSTS stehen. Bei "
http://127.0.0.1" dann entsprechend "127.0.0.1". Und wenn es mal auf "
http://rechentrainer.schule" läuft, dann muss da "rechentrainer.schule" drin enthalten sein.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 19:25
von nezzcarth
LukeNukem hat geschrieben: Donnerstag 26. Januar 2023, 18:52
In die ALLOWED_HOSTS gehört die IP-Adresse Deines Tablet und in die Adreßzeile Deines Tablet die IP-Adresse des Rechners, auf den Dein Django läuft
Ich hoffe, ich verstehe dich nicht falsch (dann entschuldige bitte), aber das ist so eigentlich nicht korrekt.Der Sinn hinter ALLOWED_HOSTS ist es, zu verhindern, dass Unfug mit dem Host-Request-Header getrieben wird. Beim Zugriff über Domainnamen werden dort also die zulässigen Domainnamen, auf die die App "ansprechen" darf, hinterlegt und beim Zugriff über die IP-Adresse – wie andere im Thread auch schon meinten – eben die zulässigen IPs. Entsprechend muss Pitwheasel dort also die IP(s) des Rechners eintragen, auf dem Django läuft. Lokal sollte der Server so konfiguriert werden, dass er auf 0.0.0.0 (allen Interfaces) lauscht und in die ALLOWED_HOSTS gehören alle IPs, die der Rechner hat. Zudem muss sicher gestellt werden, wie andere auch zuvor meinten, dass auf dem Rechner, auf dem der Server läuft, keine Firewall dazwischen funkt und dass es im Netzwerk keine anderen Restriktionen gibt. Die Django Einstellungen sind so, wie beschrieben eigentlich korrekt.
Re: Bildschirmtastatur simulieren
Verfasst: Donnerstag 26. Januar 2023, 19:32
von Pitwheazle
Also, nachdem ich die IP Adressen meines iPads und meines iPhones eingetragen habe geht es! Vorher ging es nicht.