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
Turbogears 、 Cherrypy を使用:
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
Werkzeug :
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
そのため、これらのフレームワークのいずれかを選択する必要があります。
これは古い質問です。しかし、良い答えが与えられなかったことは驚くべきことです。
まず第一に、フレームワークに言及せずに質問は完全に有効です。 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ポインター例外が発生します。パラメータも。
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()
これらは、CGI fieldstorageオブジェクトに保存されます。
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
CGIフレームワークとして使用するものに多少依存しますが、プログラムからアクセスできる辞書で利用できます。ドキュメントを紹介しますが、現時点ではpython.orgにアクセスできません。しかし、 mail.python.orgのこのメモは最初のポインターを提供します 。詳細については、CGIおよびURLLIB Python libsをご覧ください。
更新
さて、そのリンクは破壊されました。 基本的な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を持つrequest引数を受け取ります。他のフレームワークでは異なる方法で処理されます。