Skip to content

Django - Webframework

Python3
1 1 147
  • Django ist ein Webframework was auf Python basiert. Was liegt also näher, als das jetzt mal auszuprobieren, wo ich ein wenig Python kenne. Ich kann mich noch gut erinnern, wie ich das mal vor ca. zwei Jahren ausprobieren wollte, bin ich kläglich gescheitert. Grund waren damals mangelnde Python Kenntnisse. Aktuell sollte die Kenntnisse reichen um das zu mindestens mal zu testen.

    Es gibt zwei gute Tutorials

    Das war jetzt nicht so schwer, bis auf die Tatsache das die immer alle lokal ausprobieren. Das mache ich immer erst, wenn ich weiß wie das alles funktioniert. Vorher teste ich auf meinem ROCKPro64 und wenn ich den versaut 😉 habe, wird der neu installiert - fertig!

    Ok, der Webserver mit der Anwendung wird normalerweise auf dem Localhost ausgeliefert.

    (myvenv) frank@debian:~/djangogirls$ python manage.py runserver
    Performing system checks...
    
    System check identified no issues (0 silenced).
    August 29, 2021 - 08:52:38
    Django version 3.2.6, using settings 'mysite.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.
    

    Nicht so praktisch, wenn ich das von einem Haupt-PC aus erreichen möchte. Es gibt dazu eine Konfigurationsdatei

    nano mysite/settings.py
    

    Darin steht als Standard, das hier.

    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = True
    ALLOWED_HOSTS = []
    

    Wenn DEBUG auf True gesetzt ist und ALLOWED_HOSTS leer, dann wird der "Host" gegen ['localhost', '127.0.0.1', '[::1]'] validiert.

    Wenn ich den Webserver aufrufe, kommt das hier

    098201d9-5489-440e-bf72-a047aa192463-grafik.png

    Diese Ausgabe auf dem Webserver steht dort wegen

    DEBUG = True
    

    das ist natürlich auf einem produktivem Server eine schlechte Idee. Darum auch die Warnung eine Zeile drüber!
    Aber zum Glück, da steht auch die Lösung meines Problemes 🙂

     SECURITY WARNING: don't run with debug turned on in production!
     DEBUG = True
     ALLOWED_HOSTS = ['192.68.3.172']
    

    Man fügt die IP-Adresse hinzu und startet dann den Webserver mit

    (myvenv) frank@debian:~/djangogirls$ python manage.py runserver 0:8000
    Watching for file changes with StatReloader
    Performing system checks...
    
    System check identified no issues (0 silenced).
    August 29, 2021 - 11:37:16
    Django version 3.2.6, using settings 'mysite.settings'
    Starting development server at http://0:8000/
    Quit the server with CONTROL-C.
    

    0:8000 ist eine Abkürzung für 0.0.0.0:8000 Damit ist der Webserver jetzt über die IP-Adresse erreichbar.

    296ab523-d860-4f82-b815-f195209e50fb-grafik.png

  • Python3 - pyqtSignal

    Python3 python3 restic-ui
    1
    0 Stimmen
    1 Beiträge
    122 Aufrufe
    Niemand hat geantwortet
  • Python3 - enumerate()

    Python3 python3
    2
    1
    0 Stimmen
    2 Beiträge
    174 Aufrufe
    FrankMF
    Ich habe noch was Code gefunden, den ich mal dringend aufräumen musste Wenn ich mit dem Restic UI die Snapshots anzeige, dann sieht das so aus. reading repository password from stdin ID Time Host Tags Paths ---------------------------------------------------------------------------- 4e769748 2021-12-31 21:48:34 frank-MS-7C37 /home/frank/Bilder 34298934 2022-01-26 20:15:53 frank-MS-7C37 /home/frank/Bilder 0d5d88f2 2022-01-27 21:05:07 frank-MS-7C37 /home/frank/Bilder f0e7d5a7 2022-01-29 13:46:12 frank-MS-7C37 /home/frank/Bilder 79918d70 2022-01-29 13:52:56 frank-MS-7C37 /home/frank/Bilder d74272a3 2022-01-30 11:54:20 frank-MS-7C37 /home/frank/Bilder 11b0b5ad 2022-01-30 11:57:44 frank-MS-7C37 /home/frank/Bilder 4a7450d2 2022-02-20 09:35:56 frank-MS-7C37 /home/frank/Bilder c1a4a51d 2022-02-20 09:36:43 frank-MS-7C37 /home/frank/Bilder d178ded5 2022-02-20 09:38:53 frank-MS-7C37 /home/frank/Bilder 997e2259 2022-02-20 16:35:57 frank-MS-7C37 /home/frank/Bilder 3320ad5c 2022-02-20 16:49:19 frank-MS-7C37 /home/frank/Bilder ---------------------------------------------------------------------------- 12 snapshots Mich interessieren die IDs, weil ich bei der Eingabe der IDs überprüfen möchte, ob die eingegebene ID existiert. Also muss ich das irgendwie auslesen und speichern. Das habe ich bis jetzt so gemacht. def id_append(self, result): # We split the result into individual lines. # Result was passed. And create an list. result_list = result.split('\n') # We count the number of repositories and search for 'source'. count = result.count(backup_data[row].source) # Offset added, first interesting line is line 3! count = count + 3 # We loop through the list and output the ID's and store in snapshot_id x = 3 while x < count: a = result_list[x] y = a[0:8] snapshot_id.append(y) x = x + 1 Das erschien mir heute, beim erneuten Betrachten, Spaghetticode zu sein. Machen wir das mal etwas ordentlicher. Ich nehme die Ausgabe (stdout) und erzeuge eine Liste, jede Zeile ein Element. result_list = result.split('\n') Sieht so aus ['reading repository password from stdin', 'ID Time Host Tags Paths', '----------------------------------------------------------------------------', '4e769748 2021-12-31 21:48:34 frank-MS-7C37 /home/frank/Bilder', '34298934 2022-01-26 20:15:53 frank-MS-7C37 /home/frank/Bilder', '0d5d88f2 2022-01-27 21:05:07 frank-MS-7C37 /home/frank/Bilder', 'f0e7d5a7 2022-01-29 13:46:12 frank-MS-7C37 /home/frank/Bilder', '79918d70 2022-01-29 13:52:56 frank-MS-7C37 /home/frank/Bilder', 'd74272a3 2022-01-30 11:54:20 frank-MS-7C37 /home/frank/Bilder', '11b0b5ad 2022-01-30 11:57:44 frank-MS-7C37 /home/frank/Bilder', '4a7450d2 2022-02-20 09:35:56 frank-MS-7C37 /home/frank/Bilder', 'c1a4a51d 2022-02-20 09:36:43 frank-MS-7C37 /home/frank/Bilder', 'd178ded5 2022-02-20 09:38:53 frank-MS-7C37 /home/frank/Bilder', '997e2259 2022-02-20 16:35:57 frank-MS-7C37 /home/frank/Bilder', '3320ad5c 2022-02-20 16:49:19 frank-MS-7C37 /home/frank/Bilder', '----------------------------------------------------------------------------', '12 snapshots', ''] Diesmal benutzen wir die enumerate() Funktion for count, value in enumerate(result_list): print(count, value) Das was raus kommt, sieht so aus 0 reading repository password from stdin 1 ID Time Host Tags Paths 2 ---------------------------------------------------------------------------- 3 4e769748 2021-12-31 21:48:34 frank-MS-7C37 /home/frank/Bilder 4 34298934 2022-01-26 20:15:53 frank-MS-7C37 /home/frank/Bilder 5 0d5d88f2 2022-01-27 21:05:07 frank-MS-7C37 /home/frank/Bilder 6 f0e7d5a7 2022-01-29 13:46:12 frank-MS-7C37 /home/frank/Bilder 7 79918d70 2022-01-29 13:52:56 frank-MS-7C37 /home/frank/Bilder 8 d74272a3 2022-01-30 11:54:20 frank-MS-7C37 /home/frank/Bilder 9 11b0b5ad 2022-01-30 11:57:44 frank-MS-7C37 /home/frank/Bilder 10 4a7450d2 2022-02-20 09:35:56 frank-MS-7C37 /home/frank/Bilder 11 c1a4a51d 2022-02-20 09:36:43 frank-MS-7C37 /home/frank/Bilder 12 d178ded5 2022-02-20 09:38:53 frank-MS-7C37 /home/frank/Bilder 13 997e2259 2022-02-20 16:35:57 frank-MS-7C37 /home/frank/Bilder 14 3320ad5c 2022-02-20 16:49:19 frank-MS-7C37 /home/frank/Bilder 15 ---------------------------------------------------------------------------- 16 12 snapshots 17 Mich interessieren nur die Zeilen mit /home/frank/Bilder Das kann man so abfragen if backup_data[row].source in value: Und jetzt nur die ID entsprechend abspeichern snapshot_id.append(value[0:8]) Sieht jetzt komplett so aus result_list = result.split('\n') for count, value in enumerate(result_list): if backup_data[row].source in value: snapshot_id.append(value[0:8]) print(count, value[0:8]) Somit speichert er jetzt nur noch die IDs, der folgenden Ausgabe. 3 4e769748 4 34298934 5 0d5d88f2 6 f0e7d5a7 7 79918d70 8 d74272a3 9 11b0b5ad 10 4a7450d2 11 c1a4a51d 12 d178ded5 13 997e2259 14 3320ad5c Diese IDs, kann ich dann weiterverarbeiten.
  • Python3 - PyQt5 QIcon

    Python3 pyqt5 python3
    2
    2
    0 Stimmen
    2 Beiträge
    189 Aufrufe
    FrankMF
    Die Suchpfade findet man hiermit print(QIcon.themeSearchPaths()) Ausgabe ['/home/frank/.icons', '/usr/share/cinnamon/icons', '/var/lib/flatpak/exports/share/icons', '/usr/share/icons', ':/icons']
  • Python3 - QInputDialog

    Python3 python3
    1
    1
    0 Stimmen
    1 Beiträge
    194 Aufrufe
    Niemand hat geantwortet
  • Python3 - Umzug nach Fedora 34

    Python3 python3
    1
    0 Stimmen
    1 Beiträge
    208 Aufrufe
    Niemand hat geantwortet
  • Python3 - PyQt5 Layout

    Python3 pyqt5 python3
    1
    2
    0 Stimmen
    1 Beiträge
    205 Aufrufe
    Niemand hat geantwortet
  • Python3 - RegEx für ein LineEdit

    Python3 pyqt5 python3
    2
    1
    0 Stimmen
    2 Beiträge
    231 Aufrufe
    FrankMF
    Gut, Menschen die mich kennen, wissen das IPv6 nicht so mein Spezialgebiet ist. Es hilft aber nichts, auch damit muss man sich beschäftigen Es war etwas schwierig was Passendes zu finden, aber ich denke das hier ist ganz gut. Ob es alle Möglichkeiten bei IPv6 beinhaltet, weiß ich nicht zu 100%. Hier eine Seite, wo ich was Passendes gefunden habe. https://ihateregex.io/expr/ipv6/ Code # regex für IPv6 reg_ex = QRegExp('^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$') input_validator = QRegExpValidator(reg_ex, self.lineedit2_ipv6) self.lineedit2_ipv6.setValidator(input_validator) Ein paar Test von mir ergaben, das es so aussieht als wenn es funktioniert
  • Wichtige Links

    Angeheftet Python3 python3
    1
    0 Stimmen
    1 Beiträge
    220 Aufrufe
    Niemand hat geantwortet