Di PHP Anda hanya bisa menggunakan $_POST
untuk POST dan $_GET
untuk variabel GET (Query string). Apa yang setara dengan Python?
Di PHP Anda hanya bisa menggunakan $_POST
untuk POST dan $_GET
untuk variabel GET (Query string). Apa yang setara dengan Python?
Jawaban:
misalkan Anda memposting formulir html dengan ini:
<input type="text" name="username">
Jika menggunakan cgi mentah :
import cgi
form = cgi.FieldStorage()
print form["username"]
Jika menggunakan Django , Pylons , Flask atau Pyramid :
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
Menggunakan Turbogears , Cherrypy :
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
Werkzeug :
print request.form['username']
Jika menggunakan Cherrypy atau Turbogears, Anda juga dapat menentukan fungsi penangan Anda dengan mengambil parameter secara langsung:
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
Jadi, Anda benar-benar harus memilih salah satu kerangka kerja tersebut.
import cgi
, bukan print form["username"].value
?
Bottle
yang saya percaya gunakan wsgi
, adakah yang bisa memposting yang setara untuk digunakan dalam skenario itu? Tanggapan di atas adalah penjelasan paling jelas yang saya temukan, hanya saja tidak termasuk skenario saya.
Saya tahu ini pertanyaan lama. Namun sangat mengejutkan bahwa tidak ada jawaban yang baik yang diberikan.
Pertama-tama pertanyaan tersebut sepenuhnya valid tanpa menyebutkan kerangka kerjanya. KONTEKS adalah persamaan bahasa PHP. Meskipun ada banyak cara untuk mendapatkan parameter string kueri dengan Python, variabel kerangka kerja hanya diisi dengan mudah. Di PHP, $_GET
dan $_POST
juga variabel kenyamanan. Mereka diurai masing-masing dari QUERY_URI dan php: // input.
Di Python, fungsi ini akan menjadi os.getenv('QUERY_STRING')
dan sys.stdin.read()
. Ingatlah untuk mengimpor modul os dan sys.
Kita harus berhati-hati dengan kata "CGI" di sini, terutama jika berbicara tentang dua bahasa dan kesamaannya saat berinteraksi dengan server web. 1. CGI, sebagai protokol, mendefinisikan mekanisme transpor data dalam protokol HTTP. 2. Python dapat dikonfigurasi untuk dijalankan sebagai skrip CGI di Apache. 3. Modul CGI dengan Python menawarkan beberapa fungsi kemudahan.
Karena protokol HTTP tidak bergantung pada bahasa, dan ekstensi CGI Apache juga tidak bergantung pada bahasa, mendapatkan parameter GET dan POST seharusnya hanya memiliki perbedaan sintaks antar bahasa.
Inilah rutinitas Python untuk mengisi kamus 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
dan untuk 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
Sekarang Anda dapat mengakses bidang sebagai berikut:
print GET.get('user_id')
print POST.get('user_name')
Saya juga harus menunjukkan bahwa modul CGI tidak berfungsi dengan baik. Pertimbangkan permintaan HTTP ini:
POST / test.py?user_id=6
user_name=Bob&age=30
Penggunaan CGI.FieldStorage().getvalue('user_id')
akan menyebabkan pengecualian pointer nol karena modul secara membabi buta memeriksa data POST, mengabaikan fakta bahwa permintaan POST juga dapat membawa parameter GET.
AttributeError: 'NoneType' object has no attribute 'split'
menggunakan CGI
dengan Python
2.7
POST.get('user_name', 'default_value')
.
Saya telah menemukan jawaban nosklo sangat luas dan berguna! Bagi mereka, seperti saya, yang mungkin menemukan mengakses data permintaan mentah secara langsung juga berguna, saya ingin menambahkan cara untuk melakukannya:
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
. Variabel lingkungan berikut terkait: os.environ.get('PATH_INFO')
yang mendapatkan nama metode (misalnya: / ThisIsMyMethod) dan os.environ.get('SCRIPT_NAME')
yang menyediakan jalur ke skrip dari folder akar host web (misalnya: /cgi-bin/cgi.py). Dalam kasus saya, QUERY_STRING kosong, karena saya menggunakan POST.
Mereka disimpan dalam objek penyimpanan bidang CGI.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Ini agak tergantung pada apa yang Anda gunakan sebagai kerangka CGI, tetapi mereka tersedia dalam kamus yang dapat diakses oleh program. Saya akan mengarahkan Anda ke dokumennya, tetapi saya tidak dapat mengakses python.org sekarang. Tetapi catatan di mail.python.org ini akan memberi Anda petunjuk pertama . Lihat libs CGI dan URLLIB Python untuk lebih lanjut.
Memperbarui
Oke, tautan itu rusak. Berikut referensi wsgi dasar
Python hanyalah sebuah bahasa, untuk mendapatkan data GET dan POST, Anda membutuhkan web framework atau toolkit yang ditulis dengan Python. Django adalah satu, seperti yang ditunjukkan Charlie, modul standar cgi dan urllib adalah yang lainnya. Juga tersedia Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi, dll, dll.
Dalam Django, fungsi tampilan Anda menerima argumen permintaan yang memiliki request.GET dan request.POST. Kerangka lain akan melakukannya secara berbeda.