Ist Django für mein Projekt geeignet?

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

Danke!

Code: Alles auswählen

protokoll.filter(start__date=datetime.date.today())
funktioniert nicht, aber

Code: Alles auswählen

protokoll.filter(start__date = date.today())
Aber

Code: Alles auswählen

protokoll.filter(start__startswith = date.today())
kann ich mglicherweise benutzen, wenn ich rausbekomme, wie man von "today" 7 Tage zurückrechnet (für die Wochenaufgaben)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
kann ich mglicherweise benutzen, wenn ich rausbekomme, wie man von "today" 7 Tage zurückrechnet (für die Wochenaufgaben)
Nee. __startswith macht einen Vergleich aus Strings - du willst aber Date- oder DateTime Objekte vergleichen. Wenn du eine Datumsspanne abfragen willst, dann mit __gt (oder __gte) und __lt (oder __lte).

Beispiele dazu findest du auch auf der Seite, die ich dir im vorherigen Post verlinkt habe.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

OK, nochmals Danke, habe ich geändert.

Ich habe es aber gerade ausprobiert:

Code: Alles auswählen

            elif filter == "Woche":
                protokoll =  protokoll.filter(start__startswith = date.today() - timedelta(days = 7))
funktioniert anscheinend auch.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pitwheazle: Nicht alles was funktioniert, funktioniert auch wirklich. Wenn Du bei SQLite bleibst und es niemals einen Grund geben wird auch mal eine ”richtige” Datenbank zu verwenden, die Datumsangaben nicht mit Zeichenkettenoperationen verarbeiten kann, dann kannst Du das natürlich machen. Unschön ist es trotzdem weil fremde Leser verwirrt sind, und überzeugt sein werden, dass das nicht funktionieren kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Guter Hinweis - ich habe es ja aber schon entsprechend geändert.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Hallo Leute, dieses Posting ist mir gerade "in die Hände gefallen" und ich habe mal einige eurer Tipps gelesen und wollte auf diesem Wege mal wieder allen danken. (wer auch immer das Posting noch aboniert hat). Ohne eure Hilfe hätte ich keinerlei Chancen gehabt den Rechentrainer zum Laufen zu bringen. Vor allem ohne @whitie s Grundgerüst.
Aber jetzt läuft der Rechentrainer schon ganz gut und langsam habe ich schon etwas Angst vor dem Erfolg. Zurzeit sind 572 Nutzer angemeldet und die Kids scheinen Tag und Nacht zu rechnen. Sie haben jetzt 57456 Aufgaben gerechnet - das heißt, meine Tabelle "Protokoll" hat schon mehr als 57500 Einträge. Das alles in etwa 4 Wochen. Wird das irgendwann zu groß?
Und noch eine Frage: Die Kids rechnen Tag und Nacht - auch wenn ich Sonntags um Halb Elf Uhr nachts nachschaue wird noch gerechnet. Kann ich im laufenden Betrieb neuen Code hochladen oder muss ich da jeweils den Server anhalten? Leider habe ich keine Ahnung, wie ich in der Zeit, in der ich den Server anhalte eine individuelle Nachricht einstellen kann.
nezzcarth
User
Beiträge: 1636
Registriert: Samstag 16. April 2011, 12:47

Das hängt stark von der Umgebung ab, die du verwendest, um deine Anwendung bereitzustellen. Kannst du bitte noch mal kurz sagen, wie dein Deployment-Setup ist?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Denkt dran: ich bin Dummie - was ist ein deplayment setup? Mein Rechentrainer ist auf uberspace gehostet und benutzt SQLite?
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Auch Dummies können Google benutzen, wenn sie einen Fachbegriff finden.

Hier kann man mit 2-3 Minuten quer lesen schon ein gutes Gefühl entwickeln, was alles dazu gehören kann:
https://de.wikipedia.org/wiki/Softwareverteilung

Natürlich wirst du als ehrenamtlicher Einzelkämpfer nicht die Ressourcen besitzen wie ein globaler Konzern.
Dennoch lohnt es sich, darüber nachzudenken, wie man sich die Arbeitsvorgänge einfach handhabbar macht.

Üblicherweise gibt es zwei (oder drei) ähnliche Server, so dass du nicht am "offenen Herzen operieren" musst.
Neuen Code würdest du so erstmal auf einen Testserver laden, in dem du nach Lust und Laune die Dinge ausprobieren und kaputt machen kannst, ohne dass deine echten Anwender auf dem produktiven Server überhaupt eine Änderung mitbekommen. Sobald der Code dann tut, wie er soll, darf er (erst noch auf den zweiten Testserver zur Abschlusskontrolle oder direkt) live gehen.
Den Server anhalten finde ich eher ungewöhnlich, aber selbst wenn es für neuen Code nötig wäre, ist das Anhalten nicht das Hauptrisiko, sondern dass dein Code nicht funktionieren könnte und versehentlich einzelne Funktionen für den Anwender zersägt, sobald der Server wieder weiterlaufen darf.
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: 873
Registriert: Sonntag 19. September 2021, 09:40

Kebap hat geschrieben: Donnerstag 28. September 2023, 08:15 Auch Dummies können Google benutzen, wenn sie einen Fachbegriff finden.

Hier kann man mit 2-3 Minuten quer lesen schon ein gutes Gefühl entwickeln, was alles dazu gehören kann:
https://de.wikipedia.org/wiki/Softwareverteilung
Danke dafür, das beantwortet meine Frage nicht ganz. Und natürlich lade ich keine Änderungen hoch, ohne sie getestet zu haben.
Ich versetze mich nur in die Lage der armen CPU: Da muss ich für 5 User gleichzeitig Aufgaben erstellen und gleichzeitig die Aufgaben von 5 weiteren Usern kontrollieren - mit dem gleichen Code. Und dann kommt der Programmierer und schiebt, während ich mich konzentriere, nochmal ein paar Zeilen Code dazu oder ändert gar einen Eintrag - da muss ich doch als CPU durcheinanderkommen!
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Du schreibst hier immer so viel von der CPU, die muss es dir wirklich angetan haben.

Man kann keine Zeilen Code nachschieben. Auf dem Server laufen Prozesse. Die werden beendet und neue Prozesse gestartet.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Whitie hat geschrieben: Dienstag 8. Februar 2022, 15:20 Bei deinen zu erwartenden Nutzerzahlen ist Sqlite dann auch nicht mehr angesagt. Das lässt sich aber später leicht umstellen.
Viele Grüße
Whitie
Hallo @Whitie: Wenn du das hier noch liest: Könntest du das jetzt bitte nochmals erklären?
Ich hatte, auch aufgrund dieser Aussage; mein Projekt nicht bei Pythonanywhere sondern bei uberspace gehostet, da ich das dort, so erinnere ich mich, umstellen, oder einfacher umstellen, kann.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

sparrow hat geschrieben: Freitag 6. Oktober 2023, 12:15 Auf dem Server laufen Prozesse. Die werden beendet und neue Prozesse gestartet.
Wie muss ich mir den so einen Prozess vorstellen?
Wie ist der jeweils mit meinem Code verknüpft?
Enthält jeder Prozess eine Kopie meines Codes?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

im einfachsten Fall startest einen Python-Interpreter, in dem dein Code läuft. Das ist dein Prozess. So ist das z.B., wenn du `python manage.py runserver` beim Entwickeln deiner Applikation ausführst. Da du aber - richtigerweise - einen WSGI-Applikationsserver laufen hast, startet der in der Regel mehrere Worker-Prozesse. Dann hast du z.B. dein Programm 4x unabhängig parallel laufen. Wie die CPU das intern macht, also z.B. auf welchem Kern welcher Prozess läuft, ist für dich total egal.

Bei Python kann man im laufenden Prozess keinen Code austauschen. D.h. wenn du ein Update machst musst du in der Regel alle Prozesse = den WSGI Applikationsserver stoppen, den neuen Code hochladen und dann den WSGI Applikationsserver neu starten.

SQLite kann schon mit Million von Datensätzen umgehen. SQLite kann nur nicht mit parallelen Schreibzugriffen umgehen. Im Sinne von: technisch nicht möglich. D.h. wenn deine Nutzerzahlen mal steigen und immer mehr Ergebnisse gleichzeitig in die DB geschrieben werden müssen, könnte SQLite irgendwann der Bottleneck werden. Wann: keine Ahnung.

Die Umstellung auf z.B. PostgreSQL ist seitens Django ja ganz einfach, muss du nur in der config.py hinterlegen. Datenmigration von SQLite -> PostgreSQL geht bestimmt auch - habe ich aber keine Praxiserfahrung.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Freitag 6. Oktober 2023, 13:08 ... Da du aber - richtigerweise - einen WSGI-Applikationsserver laufen hast, startet der in der Regel mehrere Worker-Prozesse. Dann hast du z.B. dein Programm 4x unabhängig parallel laufen. Wie die CPU das intern macht, also z.B. auf welchem Kern welcher Prozess läuft, ist für dich total egal.
OK, das ist hilfreich.
noisefloor hat geschrieben: Freitag 6. Oktober 2023, 13:08 Bei Python kann man im laufenden Prozess keinen Code austauschen. D.h. wenn du ein Update machst musst du in der Regel alle Prozesse = den WSGI Applikationsserver stoppen, den neuen Code hochladen und dann den WSGI Applikationsserver neu starten.
Kebap hat geschrieben: Donnerstag 28. September 2023, 08:15 Den Server anhalten finde ich eher ungewöhnlich ...
Also ich habe jetzt schon mehrmals im laufenden Betrieb mittels Filezilla eine view durch eine geänderte view ersetzt und konnte keine Probleme erkennen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Also ich habe jetzt schon mehrmals im laufenden Betrieb mittels Filezilla eine view durch eine geänderte view ersetzt und konnte keine Probleme erkennen.
Einen view = du hast die Datei view.py ausgetauscht?

Du benutzt auf dem produktiven Server bei Uberspace aber schon einen WSGI-Applikationsserver wie Gunicorn und nicht den eingebauten Server von Django, richtig?

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ja, ich nutze Gunicorn. Das mit WSGI hat mir ein netter Mensch von Uberspace gemacht.
Und nochmals ja - ich habe die view.py einfach hochgeladen und dabei die alte jeweils
überschrieben.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Ich bin leider kein Django Experte, aber ich vermute mal, dass der Python Prozess, dann einfach zur Laufzeit prüft, also wenn jemand eine konkrete Seite anfordert, dann wird die view.py Seite gelesen und eine entsprechende Antwort zusammengebastelt und zurückgeschickt. Das Ergebnis ist, dass du die Datei austauschen kannst, und bei der nächsten Anforderung die neue Datei für die Antwort herangezogen wird, ohne dass der Prozess neu gestartet werden muss. Das wäre relativ schlau gemacht. Nur wenn eine Anfrage genau in dem Augenblick kommt, in dem du gerade die Datei austauschst, dann enthält die Antwort vielleicht eine Fehlermeldung. Aber wie gesagt, ich vermute nur, durch dein beschriebenes Verhalten, wie es wohl intern funktionieren könnte.
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.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@Kebap: die views.py ist ein Modul. Wird also importiert. Da wird nichts dynamisch bei Leder Aufruf geladen.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

@sparrow: Wie erklärst du dann dieses Verhalten?
Also ich habe jetzt schon mehrmals im laufenden Betrieb mittels Filezilla eine view durch eine geänderte view ersetzt und konnte keine Probleme erkennen.
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.
Antworten