¿Cómo se manejan las variables POST y GET en Python?

Resuelto Ali asked hace 15 años • 6 respuestas

En PHP puedes usar variables $_POSTPOST y $_GETGET (cadena de consulta). ¿Cuál es el equivalente en Python?

Ali avatar Jan 21 '09 10:01 Ali
Aceptado

supongamos que estás publicando un formulario html con esto:

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

Si usa cgi sin formato :

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

Si usa Django , Pylons , Flask o Pyramid :

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

Usando Turbogears , Cherrypy :

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

Web.py :

form = web.input()
print form.username

Taller :

print request.form['username']

Si usa Cherrypy o Turbogears, también puede definir su función de controlador tomando un parámetro directamente:

def index(self, username):
    print username

Motor de aplicaciones de Google :

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

Entonces realmente tendrás que elegir uno de esos marcos.

nosklo avatar Jan 21 '2009 11:01 nosklo

Sé que esta es una vieja pregunta. Sin embargo, resulta sorprendente que no se haya dado una buena respuesta.

En primer lugar, la pregunta es completamente válida sin mencionar el marco. El CONTEXTO es una equivalencia del lenguaje PHP. Aunque hay muchas formas de obtener los parámetros de la cadena de consulta en Python, las variables del marco se completan convenientemente. En PHP, $_GETy $_POSTtambién son variables de conveniencia. Se analizan desde QUERY_URI y php://input respectivamente.

En Python, estas funciones serían os.getenv('QUERY_STRING')y sys.stdin.read(). Recuerde importar los módulos os y sys.

Tenemos que tener cuidado con la palabra "CGI" aquí, especialmente cuando hablamos de dos idiomas y sus puntos en común al interactuar con un servidor web. 1. CGI, como protocolo, define el mecanismo de transporte de datos en el protocolo HTTP. 2. Python se puede configurar para ejecutarse como un script CGI en Apache. 3. El módulo CGI en Python ofrece algunas funciones convenientes.

Dado que el protocolo HTTP es independiente del idioma y que la extensión CGI de Apache también lo es, obtener los parámetros GET y POST solo debe tener diferencias de sintaxis entre idiomas.

Aquí está la rutina de Python para completar un diccionario 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

y para CORREO:

POST={}
args=sys.stdin.read().split('&')

for arg in args: 
    t=arg.split('=')
    if len(t)>1: k, v=arg.split('='); POST[k]=v

Ahora puede acceder a los campos de la siguiente manera:

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

También debo señalar que el módulo CGI no funciona bien. Considere esta solicitud HTTP:

POST / test.py?user_id=6

user_name=Bob&age=30

El uso CGI.FieldStorage().getvalue('user_id')provocará una excepción de puntero nulo porque el módulo verifica ciegamente los datos POST, ignorando el hecho de que una solicitud POST también puede transportar parámetros GET.

Schien avatar Jan 11 '2015 23:01 Schien