Frage

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

War es hilfreich?

Lösung

Angenommen, Sie sind ein HTML-Formular mit dieser Veröffentlichung:

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

Bei der Verwendung von roh cgi :

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

Bei der Verwendung von Django , Pylone , Flask oder Pyramide :

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

Mit Turbogears , Web.py :

form = web.input()
print form.username

Werkzeug :

print request.form['username']

Bei der Verwendung von CherryPy oder Turbogears, können Sie auch Ihre Handler-Funktion definieren einen Parameter nehmen direkt an:

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

So Sie wirklich haben eine dieser Rahmenbedingungen wählen.

Andere Tipps

Ich habe nosklo Antwort sehr umfangreich und nützlich gefunden! Für diejenigen, die wie ich, der die rohen Anforderungsdaten Zugriff direkt auch nützlich finden könnten, würde Ich mag die Art und Weise hinzuzufügen, das zu tun:

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ß, dass dies eine alte Frage. Dennoch ist es überraschend, dass keine gute Antwort gegeben wurde.

Zu allererst die Frage ist vollständig gültig, ohne den Rahmen zu erwähnen. Der Kontext ist PHP-Sprache Äquivalenz. Obwohl es viele Möglichkeiten gibt, die Query-String-Parameter in Python zu erhalten, werden die Rahmengrößen nur bequem bevölkert. In PHP, sind $ _GET und $ _POST auch Bequemlichkeit Variablen. Sie werden analysiert von QUERY_URI und PHP. // Ein- bzw.

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

Wir müssen mit dem Wort „CGI“ hier vorsichtig sein, vor allem, wenn man über zwei Sprachen und ihre Gemeinsamkeiten, wenn es mit einem Web-Server Schnittstelle. 1. CGI, als Protokoll, definiert den Datentransportmechanismus, der in dem HTTP-Protokoll. 2. Python kann so konfiguriert werden, als CGI-Skript in Apache laufen. 3. Das CGI-Modul in Python bietet einige Komfortfunktionen.

Da das HTTP-Protokoll ist sprachunabhängig, und dass Apache CGI-Erweiterung ist auch sprachunabhängig, die GET und POST-Parameter immer nur Syntax Unterschiede zwischen den Sprachen tragen.

Hier ist die Python-Routine einen GET-Wörterbuch zu füllen:

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 die Felder zugreifen, wie folgend:

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-Anforderung:

POST / test.py?user_id=6

user_name=Bob&age=30

Mit cgi.FieldStorage (). Getvalue ( ‚user_id‘) wird eine Null-Zeiger-Ausnahme verursachen, da das Modul blind die POST-Daten überprüft, ignoriert die Tatsache, dass eine POST-Anforderung GET-Parameter tragen kann.

Sie sind in dem CGI-Fieldobjekt gespeichert.

import cgi
form = cgi.FieldStorage()

print "The user entered %s" % form.getvalue("uservalue")

Es hängt etwas ab, was Sie als CGI-Framework verwenden, sondern sie in Wörterbücher zugänglich, um das Programm zur Verfügung stehen. Ich würde Sie die Dokumentation verweisen, aber ich bin nicht immer durch gerade jetzt python.org. Aber dieser Notiz auf mail.python.org geben Ihnen einen ersten Zeiger . Schauen Sie sich die CGI und urllib Python Libs für mehr.

Aktualisieren

Okay, das Link gesprengt. Hier ist der Grund wsgi ref

Python ist nur eine Sprache, zu bekommen GET und POST-Daten, benötigen Sie einen Web-Framework oder Toolkit in Python geschrieben. Django ist ein, wie Charlie vorträgt, cgi und urllib Standardmodule sind andere. Ebenfalls erhältlich sind Turbogears, Pylone, CherryPy, web.py, mod_python, FastCGI, etc, etc.

In Django erhalten Ihre Ansicht Funktionen eine Anfrage Argument, das request.GET und request.POST hat. Andere Rahmenbedingungen wird es anders machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top