PHP'de $_POST
POST ve $_GET
GET (Sorgu dizesi) değişkenleri için kullanabilirsiniz. Python'daki karşılığı nedir?
PHP'de $_POST
POST ve $_GET
GET (Sorgu dizesi) değişkenleri için kullanabilirsiniz. Python'daki karşılığı nedir?
Yanıtlar:
bununla birlikte bir html formu gönderdiğinizi varsayalım:
<input type="text" name="username">
Ham cgi kullanıyorsanız :
import cgi
form = cgi.FieldStorage()
print form["username"]
Kullanılıyorsa Django , Pylons , Flask veya Piramit :
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
Turbogears , Cherrypy kullanarak :
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
Werkzeug :
print request.form['username']
Cherrypy veya Turbogears kullanıyorsanız, doğrudan parametre alarak işleyici işlevinizi de tanımlayabilirsiniz:
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
Yani bu çerçevelerden birini seçmek zorunda kalacaksınız.
import cgi
değil mi print form["username"].value
?
Bottle
inanıyorum kullanıyorum wsgi
, kimse bu senaryoda kullanmak için eşdeğer gönderebilir miyim? Yukarıdaki yanıt, karşılaştığım en açık açıklamadır, sadece senaryomu içermez.
Bunun eski bir soru olduğunu biliyorum. Yine de iyi bir cevap verilmemesi şaşırtıcı.
Her şeyden önce soru, çerçeveden bahsetmeden tamamen geçerlidir. CONTEXT bir PHP dil denkliğidir. Python'da sorgu dizesi parametrelerini almanın birçok yolu olmasına rağmen, çerçeve değişkenleri uygun şekilde doldurulur. PHP $_GET
ve $_POST
aynı zamanda kolaylık değişkenleridir. Sırasıyla QUERY_URI ve php: // girdilerinden ayrıştırılırlar.
Python'da bu işlevler os.getenv('QUERY_STRING')
ve olur sys.stdin.read()
. İşletim sistemi ve sys modüllerini almayı unutmayın.
Burada, özellikle bir web sunucusuyla etkileşim kurarken iki dil ve onların ortak özelliklerinden bahsederken "CGI" kelimesine dikkat etmeliyiz. 1. CGI, bir protokol olarak, HTTP protokolündeki veri aktarım mekanizmasını tanımlar. 2. Python, Apache'de CGI betiği olarak çalışacak şekilde yapılandırılabilir. 3. Python'daki CGI modülü bazı kolaylık fonksiyonları sunar.
HTTP protokolü dilden bağımsız olduğu ve Apache'nin CGI uzantısı da dilden bağımsız olduğu için, GET ve POST parametrelerini almak, diller arasında yalnızca sözdizimi farklılıkları taşımalıdır.
İşte bir GET sözlüğünü doldurmak için Python yordamı:
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
ve POST için:
POST={}
args=sys.stdin.read().split('&')
for arg in args:
t=arg.split('=')
if len(t)>1: k, v=arg.split('='); POST[k]=v
Artık alanlara aşağıdaki gibi erişebilirsiniz:
print GET.get('user_id')
print POST.get('user_name')
Ayrıca CGI modülünün iyi çalışmadığını da belirtmeliyim. Bu HTTP isteğini düşünün:
POST / test.py?user_id=6
user_name=Bob&age=30
CGI.FieldStorage().getvalue('user_id')
Modül POST verilerini körü körüne kontrol ettiğinden, POST isteğinin GET parametrelerini de taşıyabildiğini göz ardı ettiği için, kullanmak boş bir işaretçi istisnasına neden olur.
AttributeError: 'NoneType' object has no attribute 'split'
kullanıyorumCGI
Python
POST.get('user_name', 'default_value')
.
Nosklo'nun cevabını çok kapsamlı ve kullanışlı buldum! Benim gibi, ham istek verilerine doğrudan da yararlı bulabilecekler için, bunu yapmanın yolunu eklemek istiyorum:
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
. Aşağıdaki çevresel değişkenler birbiriyle ilişkilidir: os.environ.get('PATH_INFO')
yöntem adını alır (örneğin: / ThisIsMyMethod) ve os.environ.get('SCRIPT_NAME')
web ana bilgisayarının kök klasöründen (örn: /cgi-bin/cgi.py) komut dosyasına giden yolu sağlar. Benim durumumda, POST kullandığım için QUERY_STRING boş.
CGI fieldtorage nesnesinde saklanırlar.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Biraz CGI çerçevesi olarak ne kullandığınıza bağlıdır, ancak bunlar program tarafından erişilebilen sözlüklerde mevcuttur. Sizi dokümanlara yönlendirirdim, ama şu anda python.org'a geçemiyorum. Ancak mail.python.org'daki bu not size ilk işaretçisi verecektir . Daha fazla bilgi için CGI ve URLLIB Python kütüphanelerine bakın.
Güncelleme
Tamam, bu bağlantı koptu. İşte temel wsgi ref
Python sadece bir dildir, GET ve POST verilerini almak için Python'da yazılmış bir web çerçevesine veya araç setine ihtiyacınız vardır. Django, Charlie'nin belirttiği gibi, cgi ve urllib standart modülleri diğerleri. Ayrıca Turbogears, Pilonlar, CherryPy, web.py, mod_python, fastcgi, vb.
Django'da, görünüm işlevleriniz request.GET ve request.POST içeren bir istek bağımsız değişkeni alır. Diğer çerçeveler bunu farklı yapacak.