En PHP, vous pouvez simplement utiliser $_POST
pour POST et $_GET
pour les variables GET (Query string). Quel est l'équivalent en Python?
En PHP, vous pouvez simplement utiliser $_POST
pour POST et $_GET
pour les variables GET (Query string). Quel est l'équivalent en Python?
Réponses:
supposons que vous publiez un formulaire html avec ceci:
<input type="text" name="username">
Si vous utilisez un CGI brut :
import cgi
form = cgi.FieldStorage()
print form["username"]
Si vous utilisez Django , Pylons , Flask ou Pyramid :
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
Utilisation de Turbogears , Cherrypy :
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
Werkzeug :
print request.form['username']
Si vous utilisez Cherrypy ou Turbogears, vous pouvez également définir votre fonction de gestionnaire en prenant directement un paramètre:
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
Vous devrez donc vraiment choisir l'un de ces cadres.
import cgi
, n'est-ce pas print form["username"].value
?
Bottle
ce que je crois utilise wsgi
, quelqu'un pourrait-il publier l'équivalent à utiliser dans ce scénario? La réponse ci-dessus est l'explication la plus claire que j'ai rencontrée, elle n'inclut tout simplement pas mon scénario.
Je sais que c'est une vieille question. Pourtant, il est surprenant qu'aucune bonne réponse n'ait été donnée.
Tout d'abord, la question est tout à fait valable sans mentionner le cadre. Le CONTEXTE est une équivalence de langage PHP. Bien qu'il existe de nombreuses façons d'obtenir les paramètres de chaîne de requête en Python, les variables de structure sont simplement remplies de manière pratique. En PHP, $_GET
et $_POST
sont également des variables de commodité. Ils sont analysés respectivement à partir des entrées QUERY_URI et php: //.
En Python, ces fonctions seraient os.getenv('QUERY_STRING')
et sys.stdin.read()
. N'oubliez pas d'importer les modules os et sys.
Il faut être prudent avec le mot «CGI» ici, surtout quand on parle de deux langues et de leurs points communs lors de l’interfaçage avec un serveur web. 1. CGI, en tant que protocole, définit le mécanisme de transport de données dans le protocole HTTP. 2. Python peut être configuré pour s'exécuter en tant que script CGI dans Apache. 3. Le module CGI en Python offre des fonctions pratiques.
Étant donné que le protocole HTTP est indépendant du langage et que l'extension CGI d'Apache est également indépendante du langage, l'obtention des paramètres GET et POST ne devrait supporter que les différences de syntaxe entre les langages.
Voici la routine Python pour remplir un dictionnaire 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
et pour 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
Vous pouvez maintenant accéder aux champs comme suit:
print GET.get('user_id')
print POST.get('user_name')
Je dois également souligner que le module CGI ne fonctionne pas bien. Considérez cette requête HTTP:
POST / test.py?user_id=6
user_name=Bob&age=30
L'utilisation CGI.FieldStorage().getvalue('user_id')
provoquera une exception de pointeur nul car le module vérifie aveuglément les données POST, ignorant le fait qu'une requête POST peut également transporter des paramètres GET.
AttributeError: 'NoneType' object has no attribute 'split'
utilisation CGI
avec Python
2.7
POST.get('user_name', 'default_value')
.
J'ai trouvé la réponse de nosklo très complète et utile! Pour ceux, comme moi, qui pourraient trouver l'accès direct aux données de demande brutes également utile, j'aimerais ajouter la façon de le faire:
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
. Les variables d'environnement suivantes sont liées: os.environ.get('PATH_INFO')
qui obtient le nom de la méthode (par exemple: / ThisIsMyMethod) et os.environ.get('SCRIPT_NAME')
qui fournit le chemin vers le script depuis le dossier racine de l'hôte Web (par exemple: /cgi-bin/cgi.py). Dans mon cas, QUERY_STRING est vide, car j'utilise POST.
Ils sont stockés dans l'objet CGI fieldstorage.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Cela dépend un peu de ce que vous utilisez comme framework CGI, mais ils sont disponibles dans des dictionnaires accessibles au programme. Je vous indiquerais la documentation, mais je ne parviens pas à accéder à python.org pour le moment. Mais cette note sur mail.python.org vous donnera un premier pointeur . Regardez les bibliothèques Python CGI et URLLIB pour en savoir plus.
Mettre à jour
D'accord, ce lien a éclaté. Voici la référence wsgi de base
Python n'est qu'un langage, pour obtenir des données GET et POST, vous avez besoin d'un framework Web ou d'un toolkit écrit en Python. Django en est un, comme le souligne Charlie, les modules standard cgi et urllib en sont d'autres. Sont également disponibles Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, etc., etc.
Dans Django, vos fonctions d'affichage reçoivent un argument de requête qui a request.GET et request.POST. D'autres cadres le feront différemment.