Question

En PHP, vous pouvez simplement utiliser $ _ POST pour le POST et $ _GET pour les variables GET (chaîne de requête). Quel est l'équivalent en Python?

Était-ce utile?

La solution

supposons que vous publiez un formulaire HTML avec ceci:

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

Si vous utilisez raw cgi :

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

Si vous utilisez Django , Pylônes , Flacon ou pyramide :

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

Moteur Google App :

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 frameworks.

Autres conseils

J'ai trouvé la réponse de nosklo très complète et utile! Pour ceux qui, comme moi, pourraient trouver utile d’accéder directement aux données de demande brutes également, je voudrais ajouter le moyen 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()

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 l'équivalent du 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 renseignées. En PHP, $ _GET et $ _POST sont aussi des variables de commodité. Ils sont analysés depuis les entrées QUERY_URI et php: //, respectivement.

En Python, ces fonctions seraient os.getenv ('QUERY_STRING') et sys.stdin.read (). N'oubliez pas d'importer les modules os et sys.

Nous devons faire attention au mot "CGI". ici, en particulier lorsque vous parlez 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 porter que des différences de syntaxe entre les langues.

Voici la routine Python pour renseigner 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 le 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 de cgi.FieldStorage (). getvalue ('user_id') provoquera une exception de pointeur null car le module vérifie à l'aveuglette les données POST, ignorant le fait qu'une requête POST peut également contenir des paramètres GET.

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 cadre CGI, mais ils sont disponibles dans des dictionnaires accessibles au programme. Je vous indiquerais la documentation, mais je ne parle pas de python.org pour le moment. Mais cette note sur mail.python.org vous donnera une première pointeur . Consultez les bibliothèques CGI et URLLIB Python pour plus d'informations.

Mettre à jour

D'accord, ce lien a éclaté. Voici la référence de base de wsgi

Python n’est qu’un langage. Pour obtenir les données GET et POST, vous avez besoin d’un framework ou d’une boîte à outils Web écrit en Python. Django en est un, comme le souligne Charlie, les modules standard cgi et urllib en sont d’autres. Les versions Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, etc., sont également disponibles.

Dans Django, vos fonctions de vue reçoivent un argument de requête contenant les commandes request.GET et request.POST. D'autres cadres le feront différemment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top