Anmeldeformular mit HTML im Python WEBSERVER

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Ja, es ist schon alles sorgfältiger eingerückt nun! Die ganzen kommentare etc. hat uns unser Prof. vorgegeben und er ist eine Maschine, was das Programmieren angeht ;D

Kurze Frage noch, ist es möglich, mehrere HTML Attribute, z.b von einem Formular, irgendwie in eine python variable zu speichern ?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: Um an die Attribute eines Formulars heranzukommen, brauchst Du auch noch Javascript. Wenn Dir aber die Werte der Felder reichen, dann wird CherryPy die wohl auch in irgendeiner Art Dictionary an die aufgerufene Methode übergeben. Aber statt Dir hier die Dokumentation vorlesen zu lassen, wäre es effektiver, Du würdest sie gleich selbst lesen.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Aber an das Attribut "vorname" z.B komme ich ran und kann es auch in die .json schreiben. Das Problem ist, wie komme ich an alle auf eimal ran, also wie speicher ich vorname,nachname etc. in eine python variable und übergebe es meiner generate methode, die es in die .json schreibt. Darüber finde ich nicht wirklich was in cherrypy.
BlackJack

@aCrylic: Diese Linienkommentare sind schlecht egal was für eine Maschine Dein Prof ist. So etwas hat man zu Zeiten von Assembler-Programmiereung gemacht um Abschnitte im Quelltext visuell voneinenader zu trennen weil die Struktur des Programms dort nicht anhand von Einrückung sichtbar ist. Hier stört das einfach nur und verletzt die Lesegewohnheiten von allen Python-Programmierern.

Wenn von dem Prof auch diese furchtbaren Namenszusätze kommen die den Typ kodieren, dann lauf schreiend weg und glaub dem Typ kein Wort ungeprüft. Das sind nämlich auch Marotten von vorgestern und das hat in einer dynamisch typsierten Programmiersprache die auf „duck typing” setzt, nichts zu suchen.

Leseempfehlung: Style Guide for Python Code.

Eine JSON-Datei ist für die Aufgabe die Du im ersten Beitrag beschrieben hast nicht wirklich geeignet. Das schreiben einer Datei ist nicht sicher wenn das mehrere Benutzer gleichzeitig machen können. Man müsste das mindestens mal gegen gleichzeitiges schreiben in die selbe Datei absichern. Dann können zwar immer noch Einträge verloren gehen, aber die Datei kann wenigstens nicht kaputt gehen. Besser wäre natürlich eine Datenbank zu verwenden.

Wie kommst Du denn an "vorname" heran? Im Beispiel gibt es ein <input>-Element mit dem `name`-Attribut mit dem Wert 'length' und die Methode erwartet ein Argument mit dem Namen `length`. Überleg doch mal wie man dann wohl an die anderen heran kommt. Und wenn Du alle Werte an Namen gebunden hast, dann musst Du die Werte halt in eine geeignete Datenstruktur stecken die sich dann als JSON serialisieren lässt.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Habs rausbekommen !!! Danke euch allen nochmal !!!
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

ja klar, es ist nicht sicher ! Aber wir sollen es erstmal ohne Datenbank machen, löschen kann nur derjenige, der sein passwort nachher auch richtig eingibt. Danke für den Link !! Ich kämpfe mich weiter voran !

Gruß
BlackJack

@aCrylic: Nur um das nochmal klar zu stellen: Es geht hier nicht um „security” sondern erst einmal nur um „safety”, also ein Programm das läuft ohne Daten zu zerstören. Und das ist eigentlich eine Mindestvoraussetzung für ein fehlerfreies Programm.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Okay, verstehe was du meinst. Leider sollen wir auch die .json Datei verwenden. Ich habe zwar jetzt alle Attribute reingeschrieben, jetzt muss ich mir überlegen, wie ich die .json Datei durchlaufe, um mehrere "Namen" einzutragen und nicht immer bei einem neuen formular zu überschreiben.
BlackJack

@aCrylic: ”Durchlaufen” würde ich da nichts. Du musst sie sowieso komplett lesen und wieder schreiben. Falls Du die Python-Grundlagen noch nicht drauf hast, würde ich ein Tutorial anraten. In der Python-Dokumentation ist zum Beispiel eines. Dann schaust Du Dir JSON an was das an Strukturen bietet (die JSON-Spezifikation findet man auf json.org) und die Dokumentation zum `json`-Modul um zu schauen wie JSON auf Python-Grunddatentypen abgebildet wird.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Hmm, warum nicht mit einer for-schleife durchlaufen ? Ich will ja mehrere verschiedene einträge haben, die mit einem kennwort versehen sind und ich muss die ja irgendwie in der datei finden und suchen, denn später muss sich der benutzer auch löschen können, indem er als suchkriterkum "name, nachname und kennwort" eingibt und diese 3 strings müssen in der .json datei gesucht werden und dann muss der eintrag in dieser zeile gelöscht werden, so muss ich das implementieren. Ich weiß ganz genau was zu tun ist, nur mir macht diese komische syntax bisschen kopfweh, was für mich logisch erscheint im programmcode, ist irgendwie momentan falsch in python mit der json datei. Mir fehlt halt nur noch die such-for-schleife und das ausgeben, der json datei auf dem webserver. Das muss ich noch irgendwie hinbekommen. Beispielcodes nehme ich gerne, dann muss ich nicht ewig suchen.


Gruß
BlackJack

@aCrylic: Eine Schleife zum Suchen braucht man nur wenn man nicht irgendwie *direkt* über einen *Schlüssel* auf *Werte* zugreifen kann. Und das kann man. Darum braucht man keine Schleife. Wenn's Dir Spass macht kannst Du das auch so lösen das man umständlich mit einer Schleife suchen muss.

Die komische Syntax ist eigentlich nicht wirklich schwer, man muss sich halt mal damit auseinandersetzen und ein Tutorial durcharbeiten statt zu hoffen das jemand „Beispielcodes” bringt. Die stehen alle schon im Tutorial in der Python-Dokumentation. Da sollten alle Datentypen behandelt werden die man JSON abbilden kann.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Okay, schaue ich mir an. Wenn es natürlich eine suchfunktion schon gibt aus der lib für json, dann benutze ich selbstverständlich keine schleife, wäre ja sinnlos dann.

Gruß
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: Du kannst nicht in einer json-Datei suchen und Zeilen herauslöschen. Das Vorgehen ist immer, json-Datei komplett in eine Datenstruktur der jeweiligen Programmiersprache einlesen, diese dann zu modifizieren und alles wieder nach json zu kodieren und in eine Datei zu schreiben.
Deshalb ist so etwas ja auch ungeeignet für Server, wo mehrere Benutzer gleichzeitig Datensätze verändern. Da mußt Du dann eine Zwischenschicht programmieren, die den Zugriff regelt. Das nennt sich dann Datenbankinterface und dafür gibt es schon fertige Lösungen, die dann auch auf Binärdateien aufbauen, wo auch Datensätze herausgelöscht werden können, ohne alles neu zu schreiben. Aber wenn die Vorgabe json ist, dann solltest Du wenigstens das Interface so gestalten, dass mit wenig Aufwand eine Datenbank nachgerüstet werden kann.

Aber wie in allen Datenverarbeitungsprogrammen ist der erste Schritt, sich zu überlegen, welche Daten will ich speichern, und welche Verarbeitungsmuster soll ich bedienen können. Danach schreibt man ein Modul, das diese Verarbeitung in Methoden überführt und erst dann kümmert man sich darum, wie der Nutzer nun seine Außenansicht hat.

Was ich sagen will: Userinterface und Verarbeitung müssen klar getrennt sein und dürfen nur über eine saubere Schnittstelle miteinander kommunizieren.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

aCrylic hat geschrieben:Wenn es natürlich eine suchfunktion schon gibt aus der lib für json, dann benutze ich selbstverständlich keine schleife, wäre ja sinnlos dann.
Angenommen, Du würdest eine Datenbank verwenden. Dann würde in Deinem Fall ein einfacher Key-Value Datastore genügen. Genau so verhalten sich auch Dictionaries. Und diese kannst Du nach json konvertieren, in eine Datei schreiben und aus dieser auch wieder herstellen. Insofern ist die Aufgabe zum Lernen gar nicht so schlecht. Und vielleicht wird das Thema "Locking" ja noch nachgeschoben. Aber der Coding-Style ist übel — wirklich.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Kurze Frage:

Gibt es in Python eine Möglichkeit, ein Array dynamisch zu definieren ? Quasi als Objekt einer Klasse, so das der Inhalt z.b "Strings" nicht verloren gehen, wenn aus einer Methode etwas reingeschrieben wird ?
Wenn ja, wie genau ? Hab es versucht wie in C++, nur klappt dies einfach nicht, ich verliere den Inhalt des Arrays immer nachdem die Methode ausgeführt worden ist.

Gruß
BlackJack

@aCrylic: Auch in C++ verlieren lokale Variablen nach dem abarbeiten einer Methode ihre Gültigkeit. Falls Deine Frage ist wie man „Instanzvariablen” erstellt, dann arbeite bitte endlich mal ein Tutorial durch. Da Klassen in Python nicht deklariert werden *kannst* Du es gar nicht „wie in C++” versucht haben. Und wenn Du es so gemacht hättest wie die meisten die von einer statisch typisierten OOP-Sprache kommen wenn sie zu faul oder stur sind Grundlagen zu lernen, dann hätte die Liste ihre Elemente nicht verloren, eher im Gegenteil hätte sie für alle Exemplare gegolten. Weiss der Geier was Du da durch wild herum raten und probieren gemacht hast.

Nenn vielleicht Listen besser nicht Arrays. Array-Datentypen gibt es nämlich auch.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: Du bist wirklich schwer zu verstehen, weil Du Wörter in einem anderen Sinn verwendest, wie es üblich ist. Was meinst Du mit "dynamisch". In Python ist alles dynamisch. Was ist ein Objekt einer Klasse? In Python sind Klassen auch Objekte, was Du aber wahrscheinlich nicht meinst. Statt Klasse meinst Du Instanz einer Klasse und statt Objekt Attribut. Aus einer Methode heraus kommen nur Rückgabewerte, oder sollten jedenfalls. In einer Methode kannst Du dagegen eine Liste modifizieren. Dass die Liste aber danach ihren Inhalt verliert, wäre schon sehr komisch. Entweder ist die Liste dann komplett weg, weil sie nur als lokale Variable existiert hat, oder sie existiert weiter, und zwar so, wie innerhalb der Methode.
Ohne Code kann man da wirklich nicht sagen, was Du falsch gemacht hast.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Neben dem gesagten gilt zu meist auch: Zeige einen minimalen, lauffähigen Code, der das Problem illustriert! Dies ist insbesondere dann sinnvoll, wenn man in der Terminologie (noch) nicht gut vertraut ist. (Wobei ich zugegebener Maßen auch den Teil zu C++ nicht verstanden habe!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@aCrylic
Dieses Stochern im Trüben bringt doch nichts. Du muss Dich wenigstens über die Doku mit allen zu benutzenden Technologien vertraut machen. Das geht hier sicherlich allen so, da vermutlich keiner z.B. CherryPy aus dem FF beherrscht. Und Python ist nunmal kein C++, ergo musst Du dort ansetzen. RTFM!
Antworten