質問

PHPでは、POSTに$_POSTを、GET(クエリ文字列)変数に$_GETを使用できます。 Pythonで同等のものは何ですか?

役に立ちましたか?

解決

これでhtmlフォームを投稿するとします:

<input type="text" name="username">

raw cgi を使用している場合:

import cgi
form = cgi.FieldStorage()
print form["username"]

Django を使用している場合、パイロン Flask またはピラミッド

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

Google App Engine

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

したがって、これらのフレームワークのいずれかを選択する必要があります。

他のヒント

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()

これは古い質問です。しかし、良い答えが与えられなかったことは驚くべきことです。

まず第一に、フレームワークについて言及しなくても、質問は完全に有効です。 CONTEXTはPHP言語と同等です。 Pythonでクエリ文字列パラメーターを取得する方法は多数ありますが、フレームワーク変数には便利なデータが設定されています。 PHPでは、$ _ GETと$ _POSTも便利な変数です。これらはそれぞれQUERY_URIおよびphp:// inputから解析されます。

Pythonでは、これらの関数はos.getenv( 'QUERY_STRING')およびsys.stdin.read()になります。 osおよびsysモジュールを忘れずにインポートしてください。

<!> quot; CGI <!> quot;という単語に注意する必要があります。ここでは、特に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ポインター例外が発生します。

これらは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を持つリクエスト引数を受け取ります。他のフレームワークでは異なる方法で処理されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top