PHPでは$_POST
、POST $_GET
変数とGET(クエリ文字列)変数に使用できます。Pythonで同等のものは何ですか?
PHPでは$_POST
、POST $_GET
変数とGET(クエリ文字列)変数に使用できます。Pythonで同等のものは何ですか?
回答:
これを使ってhtmlフォームを投稿するとします:
<input type="text" name="username">
raw cgiを使用している場合:
import cgi
form = cgi.FieldStorage()
print form["username"]
Django、Pylons、Flask、またはPyramidを使用している場合:
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
from cherrypy import request
print request.params['username']
form = web.input()
print form.username
print request.form['username']
CherrypyまたはTurbogearsを使用している場合は、パラメーターを直接受け取るハンドラー関数を定義することもできます。
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
したがって、これらのフレームワークのいずれかを実際に選択する必要があります。
import cgi
ませんprint form["username"].value
か?
Bottle
ていると思わwsgi
れるものを使用していますが、そのシナリオで使用するための同等のものを誰かが投稿できますか?上記の応答は、私が遭遇した最も明確な説明であり、私のシナリオは含まれていません。
私はこれが古い質問であることを知っています。しかし、良い答えが出なかったのは驚くべきことです。
まず第一に、フレームワークに言及することなく、質問は完全に有効です。CONTEXTはPHP言語と同等です。Pythonでクエリ文字列パラメーターを取得するには多くの方法がありますが、フレームワーク変数は便利に入力されるだけです。PHPでは$_GET
、$_POST
便利な変数でもあります。それらはそれぞれQUERY_URIとphp:// inputから解析されます。
Pythonでは、これらの関数はos.getenv('QUERY_STRING')
およびになりsys.stdin.read()
ます。osおよびsysモジュールをインポートすることを忘れないでください。
ここで「CGI」という単語に注意する必要があります。特に、2つの言語とWebサーバーとのインターフェースの共通点について話すときは注意が必要です。1.プロトコルとしてのCGIは、HTTPプロトコルのデータ転送メカニズムを定義します。2. Pythonは、ApacheでCGIスクリプトとして実行するように構成できます。3. PythonのCGIモジュールは、いくつかの便利な関数を提供します。
HTTPプロトコルは言語に依存せず、ApacheのCGI拡張機能も言語に依存しないため、GETパラメータとPOSTパラメータの取得は、言語間の構文の違いのみに耐える必要があります。
GET辞書にデータを入力するPythonルーチンは次のとおりです。
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
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
これで、次のようにフィールドにアクセスできます。
print GET.get('user_id')
print POST.get('user_name')
また、CGIモジュールがうまく機能しないことも指摘しなければなりません。次のHTTPリクエストを検討してください。
POST / test.py?user_id=6
user_name=Bob&age=30
CGI.FieldStorage().getvalue('user_id')
モジュールはPOSTデータを盲目的にチェックし、POSTリクエストがGETパラメータも運ぶことができるという事実を無視するため、を使用するとnullポインタ例外が発生します。
AttributeError: 'NoneType' object has no attribute 'split'
使用しCGI
てPython
2.7
POST.get('user_name', 'default_value')
。
noskloの答えは非常に広範囲で有用であることがわかりました。生のリクエストデータに直接アクセスすることも役立つと思われる私自身のように、それを行う方法を追加したいと思います。
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
です。次の環境変数が関連しています。os.environ.get('PATH_INFO')
これは、メソッド名(例:/ ThisIsMyMethod)を取得os.environ.get('SCRIPT_NAME')
し、Webホストのルートフォルダ(例:/cgi-bin/cgi.py)からスクリプトへのパスを提供します。私の場合、POSTを使用しているため、QUERY_STRINGは空白です。
それらはCGI fieldstorageオブジェクトに格納されます。
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
CGIフレームワークとして何を使用するかによって多少異なりますが、プログラムからアクセス可能な辞書で使用できます。ドキュメントを紹介しますが、今はpython.orgにアクセスしていません。しかし、mail.python.orgに関するこのメモでは、最初の指針を示します。詳細については、CGIおよびURLLIB Pythonライブラリを参照してください。
更新
わかりました、そのリンクは破壊されました。これが基本的なwsgi refです
Pythonは単なる言語であり、GETおよびPOSTデータを取得するには、Pythonで記述されたWebフレームワークまたはツールキットが必要です。Djangoは1つで、Charlieが指摘するように、cgiおよびurllib標準モジュールは他のものです。Turbogears、Pylons、CherryPy、web.py、mod_python、fastcgiなども利用できます。
Djangoでは、ビュー関数はrequest.GETとrequest.POSTを持つリクエスト引数を受け取ります。他のフレームワークは別の方法でそれを行います。