2016-05-26 4 views
1

私は複数の入力を保持するフォームを持っています... request.POSTの中で、私はすべての入力値をループしています。しかし、私は変数の中にそれらを格納したいと思います。私はどのようにそれを行うのですか?フォームをループするPOSTのデータをPython変数に格納

for key, value in request.POST.items(): 
    print(key, value) # how can I store instead of print? 

どのようにすべての値をPython配列/ dict /に保存できますか?

+1

あなたはフォームを持っていた言及したので、私はそれが上のループにはるかに簡単です想像フォームフィールドを使用します。あなたはそれを認識していますか? –

+0

@ ShangWangいいえ、それを試してみたい。フォームフィールドをループしてデータを格納するにはどうすればよいですか? – Modelesq

+0

なぜ 'mydict = request.POST'をしないのですか?または 'mydict = request.POST.copy()' – trinchet

答えて

1

POSTデータをローカル変数に格納するには、いくつかの方法があります。問題は、とにかくrequest.POSTへのアクセス権があるときに、なぜそれをしたいのですか?

# Note: all keys and values in these structures are strings 

# easiest, but immutable QueryDict 
d = request.POST 

# dict 
d = dict(request.POST.items()) 

# array 
a = list(request.POST.items()) # list of key-value tuples 
a = request.POST.values() # list of values only 

これらの変数は、現在の要求 - 応答サイクルでのみ有効です。それ以上のデータを永続化したい場合は、それらをデータベースに保存する必要があります。さらに、django formを使用してPOSTデータを処理することをお勧めします。それはあなたのための検証、タイプキャストなどの世話をします。

+0

素晴らしいです。あなたの質問に答えるために、私はapiに送るいくつかのデータを取得するrequest.POSTを使用しています。 – Modelesq

+0

私はjavascriptの背景から来て、オブジェクトのようなものはありますか?私はオブジェクトのすべての値を格納することができますように? – Modelesq

+0

.values()には隠れた入力が含まれていますか? (可能であれば隠れた入力を避けたい) – Modelesq

0

これはあなたの質問に直接答えることはできませんが、すでにフォームがあるので直接request.POSTにアクセスすることはお勧めしません。それは離れますが、フォームオブジェクトでそれらをカプセル化することによって処理する必要が生データの多くを抽象化した形は良いですが、私はデータ用フォーム自体をチェックすることをお勧め:

form = YourForm(request.POST or None) 
if form.is_valid(): 
    field1_value = form.cleaned_data['field1'] 
    field2_value = form.cleaned_data['field2'] 

Djangoのドキュメントは、how to access form fieldsについての例があります私のように

あなたがrequest.POSTと同じ可変辞書オブジェクトのコピーを取得したい場合にも、あなたができる:

post_copy = request.POST.copy() 
+0

フォームを持っている理由は、フォームからデータを取得してAPIに送信しているためです。それは私が考えることができる最善の方法でした。 – Modelesq

+0

これは完全に良い方法ですが、私はちょうどフォームを使用して、request.POSTの生データにアクセスするのではなく、データをフェッチすることを提案しています。 –

+0

私はjsの背景から来て、オブジェクトはdictですか? json文字列を送信した場合と同様に、jsオブジェクトのように見えますか? – Modelesq

関連する問題