Wie werden POST- und GET-Variablen in Python behandelt?

In PHP kannst du einfach $_POST für POST und $_GET für GET (Query string) Variablen verwenden. Was ist das Äquivalent in Python?

  • Persistentes Hashing von Strings in Python
  • Django ImageField Standard
  • Eine Python-Klasse, die wie dict wirkt
  • Zugriff auf Webcam über Internet mit Python
  • Pyconfigini: ImportError: Kein Modul namens lib.pyconfigini
  • Errno 10060] Ein Verbindungsversuch ist fehlgeschlagen, weil die angeschlossene Partei nach einer gewissen Zeit nicht richtig reagiert hat
  • Einfügen eines CLOB mit cx_Oracle
  • Wie kann ich einen dask.distributed Cluster in einem einzigen Thread ausführen?
  • 6 Solutions collect form web for “Wie werden POST- und GET-Variablen in Python behandelt?”

    Angenommen, du schreibst ein HTML-Formular mit diesem:

     <input type="text" name="username"> 

    Bei Verwendung von rohem cgi :

     import cgi form = cgi.FieldStorage() print form["username"] 

    Bei Verwendung von Django , Pylonen , Flaschen oder Pyramiden :

     print request.GET['username'] # for GET form method print request.POST['username'] # for POST form method 

    Verwenden von Turbogears , Cherrypy :

     from cherrypy import request print request.params['username'] 

    Web.py :

     form = web.input() print form.username 

    Werkzeug :

     print request.form['username'] 

    Wenn Sie Cherrypy oder Turbogears verwenden, können Sie auch Ihre Handler-Funktion direkt einen Parameter definieren:

     def index(self, username): print username 

    Google App Engine :

     class SomeHandler(webapp2.RequestHandler): def post(self): name = self.request.get('username') # this will get the value from the field named username self.response.write(name) # this will write on the document 

    Also musst du wirklich eines dieser Frameworks wählen.

    Sie werden im CGI-Feldspeicherobjekt gespeichert.

     import cgi form = cgi.FieldStorage() print "The user entered %s" % form.getvalue("uservalue") 

    Ich habe die Antwort von nosklo sehr umfangreich und nützlich gefunden! Für diejenigen, die wie ich selbst, die den Zugriff auf die Rohanforderungsdaten direkt auch nützlich finden könnten, möchte ich den Weg dazu hinzufügen:

     import os, sys # the query string, which contains the raw GET data # (For example, for http://example.com/myscript.py?a=b&c=d&e # this is "a=b&c=d&e") os.getenv("QUERY_STRING") # the raw POST data sys.stdin.read() 

    Ich weiß, das ist eine alte Frage. Doch es ist überraschend, dass keine gute Antwort gegeben wurde.

    Zuerst ist die Frage vollständig gültig, ohne den Rahmen zu erwähnen. Der KONTEXT ist PHP-Sprachäquivalenz. Obwohl es viele Möglichkeiten gibt, die Abfrage-String-Parameter in Python zu erhalten, sind die Framework-Variablen einfach bequem gefüllt. In PHP sind $ _GET und $ _POST auch Bequemlichkeitsvariablen. Sie werden aus QUERY_URI bzw. PHP: // eingegeben.

    In Python würden diese Funktionen os.getenv ('QUERY_STRING') und sys.stdin.read () sein. Denken Sie daran, os und sys Module zu importieren.

    Wir müssen mit dem Wort "CGI" hier vorsichtig sein, besonders wenn wir über zwei Sprachen und ihre Gemeinsamkeiten sprechen, wenn sie mit einem Webserver kommunizieren. 1. CGI definiert als Protokoll den Datentransportmechanismus im HTTP-Protokoll. 2. Python kann so konfiguriert werden, dass es als CGI-Skript in Apache ausgeführt wird. 3. Das cgi-Modul in Python bietet einige Komfortfunktionen.

    Da das HTTP-Protokoll sprachunabhängig ist und dass die CGI-Erweiterung von Apache auch sprachunabhängig ist, sollten die GET- und POST-Parameter nur Syntaxunterschiede zwischen Sprachen tragen.

    Hier ist die Python-Routine, um ein GET-Wörterbuch zu bevölkern:

     GET={} args=os.getenv("QUERY_STRING").split('&') for arg in args: t=arg.split('=') if len(t)>1: k,v=arg.split('='); GET[k]=v 

    Und für POST:

     POST={} args=sys.stdin.read().split('&') for arg in args: t=arg.split('=') if len(t)>1: k, v=arg.split('='); POST[k]=v 

    Sie können nun auf die Felder zugreifen:

     print GET.get('user_id') print POST.get('user_name') 

    Ich muss auch darauf hinweisen, dass das cgi-Modul nicht gut funktioniert. Betrachten Sie diese HTTP-Anfrage:

     POST / test.py?user_id=6 user_name=Bob&age=30 

    Mit cgi.FieldStorage () wird getvalue ('user_id') eine Null-Pointer-Ausnahme verursachen, da das Modul die POST-Daten blind prüft und die Tatsache ignoriert, dass eine POST-Anfrage auch GET-Parameter übertragen kann.

    Es hängt etwas davon ab, was Sie als CGI-Framework verwenden, aber sie sind in den für das Programm zugänglichen Wörterbüchern verfügbar. Ich würde dich auf die Docs hinweisen, aber ich komme jetzt nicht zu python.org. Aber diese Notiz auf mail.python.org gibt dir einen ersten Zeiger . Schauen Sie sich die CGI und URLLIB Python libs für mehr.

    Aktualisieren

    Okay, dieser Link ist gesperrt. Hier ist die grundlegende wsgi ref

    Python ist nur eine Sprache, um GET und POST Daten zu erhalten, benötigen Sie ein Web-Framework oder Toolkit in Python geschrieben. Django ist eins, wie Charlie zeigt, die cgi und urllib Standardmodule sind andere. Auch erhältlich sind Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, etc, etc.

    In Django erhalten Ihre View-Funktionen ein Request-Argument, das request.GET und request.POST hat. Andere Rahmenbedingungen werden es anders machen.

    Python ist die beste Programmiersprache der Welt.