Come vengono gestite le variabili POST e GET in Python?



Answers

Sono memorizzati nell'oggetto fieldstorage CGI.

import cgi
form = cgi.FieldStorage()

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

In PHP puoi usare $_POST per POST e $_GET per le variabili GET (stringa di query). Qual è l'equivalente in Python?




So che questa è una vecchia domanda. Eppure è sorprendente che non sia stata data una buona risposta.

Prima di tutto la domanda è completamente valida senza menzionare la struttura. Il CONTEXT è l'equivalenza del linguaggio PHP. Sebbene ci siano molti modi per ottenere i parametri della stringa di query in Python, le variabili 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 (). Ricordarsi di importare i moduli os e sys.

Dobbiamo stare attenti con la parola "CGI" qui, specialmente quando si parla di due lingue e dei loro aspetti comuni quando si interfaccia con un server web. 1. 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 riportare solo le 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 di cgi.FieldStorage (). Getvalue ('user_id') causerà un'eccezione di puntatore nullo perché il modulo controlla in modo cieco i dati POST, ignorando il fatto che una richiesta POST può portare anche i parametri GET.




Python è solo un linguaggio, per ottenere i dati GET e POST, è necessario un framework web o un 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, etc, ecc.

In Django, le tue funzioni di visualizzazione ricevono un argomento di richiesta che ha request.GET e request.POST. Altri quadri lo faranno diversamente.




Related