11

私の質問は、テンプレートからDjangoで表示する変数を渡すことです。

URLとフォームを介して変数を渡すことを知っています。私が最初のもので抱えている問題は、URLが操作される可能性があることです。これは私が望むものではありません。それを防ぐ方法はありますか?

今、これは私がバンドエイドとして持っているものです:

<form action="/match/" method="post">
{% csrf_token %}

<input type="hidden" name="name1" value="{{ male_results }}">
<input type="hidden" name="userid1" value="{{ male_pic_userid }}">

<input type="hidden" name="name2" value="{{ female_results }}">
<input type="hidden" name="userid2" value="{{ female_pic_userid }}">

<input type="submit" value="Submit" />
</form> 

これを使用する必要を回避する方法はありますか?ありがとうございました!

4

2 に答える 2

25

この種の情報を保持するには、大きく 3 つの方法があります。

セッション(あなたの状況に対する私の提案)

request.session必要なデータを辞書に詰め込むだけです。ユーザーごとに保持され、簡単にアクセスできます。

# view1
request.session['name1'] = male_results
request.session['userid1'] = male_pic_userid

# view2 (or elsewhere in view1)
male_results = request.session.get('name1')
male_pic_userid = request.session.get('userid1')

利点

  • テンプレートを変更する必要はありません (不要になったフォームを削除する以外は)。
  • きれいな URL
  • ブラウザ ウィンドウを閉じて再度開いても持続する
  • ユーザーがセッション データを変更したり、表示したりすることを心配する必要はありません (より安全です)。

短所

  • と同様に、ページ コンテンツは URLPOSTセッション データによって決まります。URL は一意ではなくなり、ユーザーはセッション情報に依存する特定のページを共有できなくなります。

クエリ パラメータ

のようなもの/match/?name1=foo1&userid1&name2=bar&userid2=2。これらは手動で追加するか ( )、フォームを に<a href='/match/?name1={{ male_results }}...変更して追加できます。POSTGET

利点

  • これらの URL は共有およびブックマークできます。フィルタリングオプション付きのリストであれば、おそらくこれが望ましいでしょう (Facebook などに投稿された「私が好きな車のリストは次のとおりです」など) 。

短所

  • すでに述べたように、これらはユーザーが自由に変更できます
  • これらをすべての URL に追加するのは非常に面倒です

POST フォーム (現在のアプローチ)

利点

  • もう少し隠されています(何らかのブラウザ拡張機能なしではユーザーに表示されません)
  • 操作がやや難しい (ただし、このあいまいさによるセキュリティに依存しないでください)
  • よりクリーンな URL

短所

  • ブラウザの「戻る」ボタンを使用すると、Internet Explorer で「このページは期限切れです」というメッセージが表示される ...
  • ... ユーザーがページのいずれかをリロードしようとすると、ほとんどのブラウザで「このデータを再送信してもよろしいですか」というメッセージが表示されます
  • この状態情報はすべて、ユーザーがページを再度開くと失われます (たとえば、URL バーで「戻る」を押す)。
  • ユーザーは、自分が見ている正確なページを共有することはできません。コンテンツは、ユーザーに表示されない情報によって部分的に決定されます
  • POSTすべてのナビゲーション アクションにデータを追加するのは非常に面倒です。
于 2012-08-23T18:06:37.457 に答える
2

HTML ページからサーバー バックエンドにデータを取得するには、URL (GET)、フォーム (POST)、および Cookie の 3 つの方法があります。

3 つのいずれかが操作される可能性があるため、サーバー上のすべてを毎回検証する必要があります。

効率の面では、投稿のタイトルによると、URL (GET) 変数は、サーバーに送信される前にフォーム データがわずかな量のエンコードを通過するため、わずかに効率的です。

通常の使用法では、サーバーからデータを取得する場合は URL (GET) 変数を使用し、サーバー上のデータを操作 (編集/削除) する場合はフォーム (POST) 変数を使用するのが標準です。

于 2012-08-23T18:06:17.133 に答える