En PHP solo puede usar $_POST
para POST y $_GET
para variables GET (cadena de consulta). ¿Cuál es el equivalente en Python?
En PHP solo puede usar $_POST
para POST y $_GET
para variables GET (cadena de consulta). ¿Cuál es el equivalente en Python?
Respuestas:
supongamos que está publicando un formulario html con esto:
<input type="text" name="username">
Si usa cgi sin procesar :
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
Werkzeug :
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
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á que elegir uno de esos marcos.
import cgi
, ¿no print form["username"].value
?
Bottle
lo que creo que usa wsgi
, ¿alguien podría publicar el equivalente a usar en ese escenario? La respuesta anterior es la explicación más clara que he encontrado, simplemente no incluye mi escenario.
Sé que esta es una vieja pregunta. Sin embargo, es 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 de 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, $_GET
y $_POST
tambié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 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 es independiente del idioma, obtener los parámetros GET y POST solo debería tener diferencias de sintaxis entre los idiomas.
Aquí está la rutina de Python para llenar 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 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
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.
AttributeError: 'NoneType' object has no attribute 'split'
uso CGI
con Python
2.7
POST.get('user_name', 'default_value')
.
¡He encontrado la respuesta de nosklo muy extensa y útil! Para aquellos, como yo, que pueden encontrar el acceso directo a los datos de solicitud sin procesar también útil, me gustaría agregar la forma de hacerlo:
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
. Las siguientes variables ambientales están relacionadas: os.environ.get('PATH_INFO')
cuál obtiene el nombre del método (por ejemplo: / ThisIsMyMethod) y os.environ.get('SCRIPT_NAME')
cuál proporciona la ruta al script desde la carpeta raíz del host web (por ejemplo: /cgi-bin/cgi.py). En mi caso, QUERY_STRING está en blanco, ya que estoy usando POST.
Se almacenan en el objeto de almacenamiento de campos CGI.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Depende un poco de lo que use como marco CGI, pero están disponibles en diccionarios accesibles para el programa. Te diría a los documentos, pero no estoy llegando a python.org en este momento. Pero esta nota en mail.python.org le dará un primer puntero . Mire las bibliotecas Python de CGI y URLLIB para obtener más información.
Actualizar
Bien, ese enlace se rompió. Aquí está la referencia básica de wsgi
Python es solo un lenguaje, para obtener datos GET y POST, necesita un marco web o kit de herramientas escrito en Python. Django es uno, como señala Charlie, los módulos estándar cgi y urllib son otros. También están disponibles Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, etc., etc.
En Django, sus funciones de vista reciben un argumento de solicitud que tiene request.GET y request.POST. Otros marcos lo harán de manera diferente.