Bildschirmtastatur simulieren

Django, Flask, Bottle, WSGI, CGI…
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

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?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst doch mit deinem smartphone im lokalen Netzwerk genauso arbeiten, einfach mit dem Rechner/der IP auf dem Django laeuft im Browser verbinden.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Ich muss noch viel lernen!
Also meine IP im Netzwerk? In meinem Fall. 192.168.178.21:8000 klappt nicht.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Mein Desktop PC ist nicht im WLAN, im gleichen Netz sind sie natürlich.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

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?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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 :D
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

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.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
grubenfox
User
Beiträge: 413
Registriert: Freitag 2. Dezember 2022, 15:49

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]'] 
Benutzeravatar
grubenfox
User
Beiträge: 413
Registriert: Freitag 2. Dezember 2022, 15:49

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.
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

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. :mrgreen:

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.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

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.
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

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

@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

Code: Alles auswählen

python manage.py 0.0.0.0:8000
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.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

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

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.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

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.
Zuletzt geändert von nezzcarth am Donnerstag 26. Januar 2023, 19:35, insgesamt 1-mal geändert.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Also, nachdem ich die IP Adressen meines iPads und meines iPhones eingetragen habe geht es! Vorher ging es nicht.
Antworten