No PHP, você pode usar apenas as variáveis $_POST
POST e $_GET
GET (string de consulta). Qual é o equivalente em Python?
No PHP, você pode usar apenas as variáveis $_POST
POST e $_GET
GET (string de consulta). Qual é o equivalente em Python?
Respostas:
suponha que você esteja postando um formulário html com este:
<input type="text" name="username">
Se estiver usando cgi bruto :
import cgi
form = cgi.FieldStorage()
print form["username"]
Se estiver usando Django , Pylons , Flask ou 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']
Se estiver usando Cherrypy ou Turbogears, também é possível definir sua função de manipulador usando um parâmetro diretamente:
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
Então você realmente terá que escolher uma dessas estruturas.
import cgi
, não é print form["username"].value
?
Bottle
que eu acredito que usa wsgi
, alguém poderia postar o equivalente a usar nesse cenário? A resposta acima é a explicação mais clara que encontrei, apenas não inclui o meu cenário.
Eu sei que esta é uma pergunta antiga. No entanto, é surpreendente que nenhuma boa resposta tenha sido dada.
Antes de tudo, a questão é completamente válida sem mencionar a estrutura. O CONTEXTO é uma equivalência da linguagem PHP. Embora existam muitas maneiras de obter os parâmetros da string de consulta no Python, as variáveis da estrutura são apenas convenientemente preenchidas. No PHP, $_GET
e $_POST
também são variáveis de conveniência. Eles são analisados de QUERY_URI e php: // input respectivamente.
No Python, essas funções seriam os.getenv('QUERY_STRING')
e sys.stdin.read()
. Lembre-se de importar os módulos os e sys.
Temos que ter cuidado com a palavra "CGI" aqui, especialmente ao falar sobre dois idiomas e seus pontos em comum ao fazer interface com um servidor da web. 1. CGI, como um protocolo, define o mecanismo de transporte de dados no protocolo HTTP. 2. O Python pode ser configurado para ser executado como um script CGI no Apache. 3. O módulo CGI no Python oferece algumas funções de conveniência.
Como o protocolo HTTP é independente de idioma e a extensão CGI do Apache também é independente de idioma, a obtenção dos parâmetros GET e POST deve suportar apenas diferenças de sintaxe entre os idiomas.
Aqui está a rotina Python para preencher um dicionário 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 para o 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
Agora você pode acessar os campos da seguinte maneira:
print GET.get('user_id')
print POST.get('user_name')
Devo também salientar que o módulo CGI não funciona bem. Considere esta solicitação HTTP:
POST / test.py?user_id=6
user_name=Bob&age=30
O uso CGI.FieldStorage().getvalue('user_id')
causará uma exceção de ponteiro nulo porque o módulo verifica cegamente os dados do POST, ignorando o fato de que uma solicitação POST também pode conter parâmetros GET.
AttributeError: 'NoneType' object has no attribute 'split'
usando CGI
com Python
2,7
POST.get('user_name', 'default_value')
.
Eu achei a resposta do nosklo muito extensa e útil! Para aqueles que, como eu, que acham que o acesso direto aos dados brutos da solicitação também é útil, gostaria de adicionar a maneira de fazer isso:
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
. As seguintes variáveis ambientais estão relacionadas: os.environ.get('PATH_INFO')
que obtém o nome do método (por exemplo: / ThisIsMyMethod) e os.environ.get('SCRIPT_NAME')
que fornece o caminho para o script a partir da pasta raiz do host da Web (por exemplo: /cgi-bin/cgi.py). No meu caso, QUERY_STRING está em branco, pois estou usando POST.
Eles são armazenados no objeto de armazenamento de campo CGI.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Depende um pouco do que você usa como uma estrutura CGI, mas eles estão disponíveis em dicionários acessíveis ao programa. Eu indicaria os documentos, mas não estou acessando o python.org no momento. Mas esta nota no mail.python.org fornecerá um primeiro ponteiro . Veja as bibliotecas CGI e URLLIB Python para obter mais.
Atualizar
Ok, esse link foi eliminado. Aqui está a referência básica do wsgi
Python é apenas uma linguagem, para obter dados GET e POST, você precisa de uma estrutura da web ou de um kit de ferramentas escrito em Python. Django é um, como Charlie aponta, os módulos padrão cgi e urllib são outros. Também estão disponíveis Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, etc., etc.
No Django, suas funções de exibição recebem um argumento de solicitação que possui request.GET e request.POST. Outras estruturas farão isso de maneira diferente.