In PHP puoi semplicemente usare le variabili $_POST
POST e $_GET
GET (Query string). Qual è l'equivalente in Python?
In PHP puoi semplicemente usare le variabili $_POST
POST e $_GET
GET (Query string). Qual è l'equivalente in Python?
Risposte:
supponiamo di pubblicare un modulo html con questo:
<input type="text" name="username">
Se si utilizza cgi crudo :
import cgi
form = cgi.FieldStorage()
print form["username"]
Se usi Django , Pylons , Flask o Pyramid :
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
Utilizzando Turbogears , Cherrypy :
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
Werkzeug :
print request.form['username']
Se si utilizza Cherrypy o Turbogears, è anche possibile definire la funzione del gestore prendendo direttamente un parametro:
def index(self, username):
print username
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
Quindi dovrai davvero scegliere uno di quei framework.
import cgi
, non è vero print form["username"].value
?
Bottle
ciò che credo usi wsgi
, qualcuno potrebbe pubblicare l'equivalente da utilizzare in quello scenario? La risposta di cui sopra è la spiegazione più chiara che ho incontrato, semplicemente non include il mio scenario.
So che questa è una vecchia domanda. Tuttavia è sorprendente che non sia stata data una buona risposta.
Innanzitutto la domanda è completamente valida senza menzionare il quadro. Il CONTESTO è un'equivalenza del linguaggio PHP. Sebbene ci siano molti modi per ottenere i parametri della stringa di query in Python, le variabili del framework sono semplicemente popolate. In PHP, $_GET
e $_POST
sono anche variabili di convenienza. Vengono analizzati rispettivamente da QUERY_URI e php: // input.
In Python, queste funzioni sarebbero os.getenv('QUERY_STRING')
e sys.stdin.read()
. Ricorda di importare i moduli os e sys.
Dobbiamo stare attenti con la parola "CGI" qui, specialmente quando parliamo di due lingue e dei loro punti in comune quando si interfaccia con un web server. 1. Il CGI, come protocollo, definisce il meccanismo di trasporto dei dati nel protocollo HTTP. 2. Python può essere configurato per essere eseguito come script CGI in Apache. 3. Il modulo CGI in Python offre alcune funzioni utili.
Poiché il protocollo HTTP è indipendente dalla lingua e che l'estensione CGI di Apache è anche indipendente dalla lingua, ottenere i parametri GET e POST dovrebbe comportare solo differenze di sintassi tra le lingue.
Ecco la routine Python per popolare un dizionario GET:
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
e per 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
Ora puoi accedere ai campi come segue:
print GET.get('user_id')
print POST.get('user_name')
Devo anche sottolineare che il modulo CGI non funziona bene. Considera questa richiesta HTTP:
POST / test.py?user_id=6
user_name=Bob&age=30
L'utilizzo CGI.FieldStorage().getvalue('user_id')
provocherà un'eccezione puntatore null poiché il modulo controlla ciecamente i dati POST, ignorando il fatto che una richiesta POST può contenere anche parametri GET.
AttributeError: 'NoneType' object has no attribute 'split'
CGI
Python
POST.get('user_name', 'default_value')
.
Ho trovato la risposta di nosklo molto ampia e utile! Per quelli, come me, che potrebbero trovare utile accedere direttamente ai dati della richiesta non elaborata, vorrei aggiungere il modo di farlo:
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()
http://www.myserver.com/cgi-bin/cgi.py/ThisIsMyMethod
. Sono correlate le seguenti variabili ambientali: os.environ.get('PATH_INFO')
che ottiene il nome del metodo (ad esempio: / ThisIsMyMethod) e os.environ.get('SCRIPT_NAME')
che fornisce il percorso dello script dalla cartella principale dell'host Web (ad esempio: /cgi-bin/cgi.py). Nel mio caso, QUERY_STRING è vuoto, poiché sto usando POST.
Sono memorizzati nell'oggetto fieldstorage CGI.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Dipende in qualche modo da ciò che usi come framework CGI, ma sono disponibili nei dizionari accessibili al programma. Vorrei indirizzarti ai documenti, ma in questo momento non riesco a contattare python.org. Ma questa nota su mail.python.org ti darà un primo puntatore . Guarda le librerie Python CGI e URLLIB per ulteriori informazioni.
Aggiornare
Ok, quel link è stato eliminato. Ecco il ref di base wsgi
Python è solo una lingua, per ottenere dati GET e POST, è necessario un framework Web o toolkit scritto in Python. Django è uno, come sottolinea Charlie, i moduli standard cgi e urllib sono altri. Sono disponibili anche Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, ecc, ecc.
In Django, le tue funzioni di visualizzazione ricevono un argomento request che ha request.GET e request.POST. Altri framework lo faranno diversamente.