W PHP możesz po prostu użyć $_POST
dla $_GET
zmiennych POST i GET (ciąg zapytania). Jaki jest odpowiednik w Pythonie?
W PHP możesz po prostu użyć $_POST
dla $_GET
zmiennych POST i GET (ciąg zapytania). Jaki jest odpowiednik w Pythonie?
Odpowiedzi:
załóżmy, że wysyłasz formularz html z tym:
<input type="text" name="username">
Jeśli używasz surowego cgi :
import cgi
form = cgi.FieldStorage()
print form["username"]
Jeśli używasz Django , Pylonów , Flask lub Pyramid :
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
Korzystanie TurboGears , CherryPy :
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
Werkzeug :
print request.form['username']
Jeśli używasz Cherrypy lub Turbogears, możesz również zdefiniować swoją funkcję obsługi, pobierając parametr bezpośrednio:
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
Więc naprawdę będziesz musiał wybrać jeden z tych frameworków.
import cgi
, prawda print form["username"].value
?
Bottle
które moim zdaniem używa wsgi
, czy ktokolwiek mógłby opublikować odpowiednik użycia w tym scenariuszu? Powyższa odpowiedź jest najjaśniejszym wyjaśnieniem, z jakim się spotkałem, po prostu nie obejmuje mojego scenariusza.
Wiem, że to stare pytanie. Zaskakujące jest jednak to, że nie podano dobrej odpowiedzi.
Przede wszystkim pytanie jest całkowicie aktualne bez wspominania o ramach. KONTEKST jest odpowiednikiem języka PHP. Chociaż istnieje wiele sposobów uzyskania parametrów ciągu zapytania w Pythonie, zmienne struktury są po prostu wygodnie wypełniane. W PHP, $_GET
a $_POST
także zmienne wygody. Są one analizowane odpowiednio z QUERY_URI i php: //.
W Pythonie te funkcje byłyby os.getenv('QUERY_STRING')
i sys.stdin.read()
. Pamiętaj, aby zaimportować moduły os i sys.
Musimy tutaj uważać na słowo "CGI", zwłaszcza gdy mówimy o dwóch językach i ich cechach wspólnych podczas interakcji z serwerem WWW. 1. CGI jako protokół definiuje mechanizm transportu danych w protokole HTTP. 2. Python można skonfigurować tak, aby działał jako skrypt CGI w Apache. 3. Moduł CGI w Pythonie oferuje kilka wygodnych funkcji.
Ponieważ protokół HTTP jest niezależny od języka, a rozszerzenie CGI Apache jest również niezależne od języka, pobieranie parametrów GET i POST powinno mieć tylko różnice składniowe w różnych językach.
Oto procedura Pythona do zapełniania słownika 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
i dla 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
Możesz teraz uzyskać dostęp do pól w następujący sposób:
print GET.get('user_id')
print POST.get('user_name')
Muszę też zaznaczyć, że moduł CGI nie działa dobrze. Rozważ to żądanie HTTP:
POST / test.py?user_id=6
user_name=Bob&age=30
Użycie CGI.FieldStorage().getvalue('user_id')
spowoduje wyjątek wskaźnika zerowego, ponieważ moduł ślepo sprawdza dane POST, ignorując fakt, że żądanie POST może również przenosić parametry GET.
AttributeError: 'NoneType' object has no attribute 'split'
używam CGI
z Python
2.7
POST.get('user_name', 'default_value')
.
Uważam, że odpowiedź nosklo jest bardzo obszerna i użyteczna! Dla tych, takich jak ja, dla których bezpośredni dostęp do nieprzetworzonych danych żądania może być również przydatny, chciałbym dodać sposób, aby to zrobić:
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
. Powiązane są następujące zmienne środowiskowe : pobierające os.environ.get('PATH_INFO')
nazwę metody (np.: / ThisIsMyMethod) i os.environ.get('SCRIPT_NAME')
zapewniające ścieżkę do skryptu z folderu głównego hosta internetowego (np.: /Cgi-bin/cgi.py). W moim przypadku QUERY_STRING jest puste, ponieważ używam POST.
Są one przechowywane w obiekcie CGI fieldstorage.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Zależy to w pewnym stopniu od tego, czego używasz jako frameworka CGI, ale są one dostępne w słownikach dostępnych dla programu. Skierowałbym cię do dokumentacji, ale nie przechodzę teraz do python.org. Ale ta notatka na mail.python.org da ci pierwszy wskazówkę . Więcej informacji znajdziesz w bibliotekach CGI i URLLIB Python.
Aktualizacja
Okej, ten link zerwany. Oto podstawowy ref. Wsgi
Python to tylko język, aby uzyskać dane GET i POST, potrzebujesz frameworka internetowego lub zestawu narzędzi napisanego w Pythonie. Django jest jednym z nich, jak wskazuje Charlie, standardowe moduły cgi i urllib to inne. Dostępne są również Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi itp.
W Django, funkcje widoku otrzymują argument żądania, który ma request.GET i request.POST. Inne frameworki zrobią to inaczej.