Externes HTML input Feld in Python abfragen und überprüfen

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.
Antworten
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Hallo Leute,

ich hätte eine Frage, bezüglich einer externen HTML Datei, die das beinhaltet.

Code: Alles auswählen

<form method="post" action="anmeldung">
	     <p>Vorname:<br><input type="text" required="required" name="vorname"/>
	     <button type="submit">Anmelden</button>
</form>
Ich rufe ja durch den action="anmeldung" parameter, die

Code: Alles auswählen

def anmeldung(self, *args, **kwargs)
auf in Python.
Nun möchte ich einfach einen Fehlerfall überprüfen, ich möchte einfach sichergehen, dass das Feld, auch tatsächlich in der externen HTML Datei existiert, also wenn das Feld im Formular "Vorname" existiert, dann soll er weiter machen, wenn nicht, dann einfach irgendeine Fehlermeldung zurückgeben. Ich habe es so versucht

Code: Alles auswählen

def anmeldung(self, *args, **kwargs):

 form = cgi.FieldStorage()
  if "vorname" not in form:
   return "<p>Error</p>"

Nur es geht leider nicht, anscheinend findet er das ganze HTML Formular nicht, wie kann ich das input feld finden mit cgi.Fieldstorage ? :K



MfG
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: bist Du jetzt von CherryPy auf CGI umgestiegen? Wie wird anmeldung aufgerufen? Hast Du die Post-Daten schon vor dem CGI-Aufruf mal eingelesen?
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Also die Sache ist die, da ich **kwargs benutze, um die Attribute des Formulares "Anmeldung" auszulesen und weiter zu verarbeiten, was auch alles funktioniert, muss ich trotzdem überprüfen, da ich CherryPy benutze, ob das Eingabefeld in Html wirklich existiert ?! Ich rufe das Anmeldeformular mit einem verweis auf die Pythonmethode /anmeldung auf und dort wird mir das Formular durch ein markup returnt. Ich will jetzt einfach überprüfen, ob es die Eingabefelder wirklich gibt, denn dass kann man mit **kwargs nicht machen, laut unserem Professor. Gibt es da nicht einfach eine Möglichkeit, die Externedatei zu laden und dann einfach nach dem Feld zu fragen ?


Gruß
BlackJack

@aCrylic: Am einfachsten wäre es wohl *nicht* ``**kwargs`` zu verwenden sondern die Argumente alle explizit aufzuführen. Dann sollte ja automatisch eine Fehlermeldung kommen wenn nicht alle angegeben wurden.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Gibt es denn trotzdem eine Möglichkeit, herauszubekommen mit **kwargs, ob das Eingabefeld tatsächlich existiert ? Es gibt nämlich einen Fall, wo ich 2 Buttons habe und ich halt vorher nicht weiß, welcher Button von dem User benutzt wird.
Zuletzt geändert von aCrylic am Mittwoch 22. Oktober 2014, 19:23, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: :? Du kannst doch nicht verschiedene Frameworks mischen und hoffen, dass die sich untereinander schon verständigen!!
Leider ist es so, dass viele Profs Anfängervorlesungen für eine läßtige Pflicht halten und zwar ständig auf die vermeintlichen hippen Sprachen und Frameworks springen, aber immer noch auf dem Stand von vor 30 Jahren stehen geblieben sind und ihre alten Konzepte über alles stülpen wollen.

Hast Du schonmal in kwargs hineinschaut, bevor Du solchen Behauptungen glaubst?

Von welcher Externen Datei redest Du?
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Ja, klar, ich hole mir ja die "Keys" so raus hier.

Code: Alles auswählen

vorname = kwargs.get('vorname')
nachname = kwargs.get('nachname')
Die sind dann auch in meiner Variable drin, nur unser Prof. sagte, dass man zusätzlich prüfen muss, weil wir CherryPy benutzen, ob die HTML Anmeldefelder im Formular, auch tatsächlich existieren ?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Um zu prüfen, ob ein Schlüssel in einem Dictionary ist, gibt es den `in`-Operator. Denn kannst Du natürlich auch auf `kwargs` anwenden. Andererseits liefert `get` None zurück, wenn der Schlüssel nicht existiert, ein leeres Feld ist dagegen ein leerer String. Aber normalerweise muß man nicht zwischen diesen beiden Fällen unterscheiden und kann gleich die Eigenschaft nutzen, dass sowohl None als auch ein leerer String in einem boolschen Kontext zu False evaluiert wird.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Hmm, eine andere Frage hätte ich noch.

Wenn ich in meiner def anmelden(self, *args, **kwargs): methode bin, wie kann ich denn ganz einfach, eine andere funktion in dieser funktion aufrufen ? Ich will halt eine variable übergeben an die andere funktion und die macht halt was mit der, wenn die funktion fertig ist, soll meine anmelden funktion natürlich noch weiter ihre arbeit ausführen und dann returnen.

Code: Alles auswählen

def anmelden(self, *args, **kwargs):
 
 var = "test"

 func(var)

 weitere_var = "bin noch nicht fertig im anmelden"
 weitere_var2 = "jetzt kann ich was an anmelden returnen"

return weitere_var2

so ? Weil irgendwie klappt das nicht in Python, einfach eine Funktion aufzurufen wie in C/C++ -.-
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: warum soll das denn nicht funktionieren? Woran merkst Du, daß es nicht funktioniert?
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Also, ich habe das hier gemacht.

Code: Alles auswählen

def test(self):

 var = "ich bin ein string"

 func(var)
 
 var2 = "ich werde nicht übergeben an func"
 return var2


def func(var):

 print(var)

 return print("test kann jetzt weiter machen")

dann gibts diese Fehlermeldung "NameError: global name 'func' is not defined"


? :roll:
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Ach, ich habs glaube ich ! Ich muss self.func() machen anscheinend
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: Wenn die Funktion irgendetwas mit der Klasse zu tun hat, dann ja, andernfalls solltest Du sie in den globalen Kontext verschieben.
Antworten