1

まず第一に、私は一般的にウェブプログラミングに非常に慣れていません。私はオンラインでたくさんのチュートリアルを読みましたが、それらのいくつかは時代遅れであるため、少し混乱しています. したがって、もし私が根本的に間違った道を進んでいるのであれば、正しい道についての提案を歓迎します. とは言っても、これはただの楽しみのためのプロジェクトなので、私が望むものを得る簡単な (10 行未満の) 方法があれば、たとえ長期的には根本的に変わることになっても、今日すぐに結果を見たいと思っています。もの。

とにかく、私は Google App Engine (Python 2.7) を使って簡単な計算をしています。フォームを表示し、ユーザーが値を入力し、下部のボタンをクリックすると、計算結果とともに結果テキストが表示されます。この部分は正常に動作しています。

私自身のテストでは、入力値を常に再入力するのは面倒で、一部のフィールドはユーザーにとって完全に明らかではないため、「http:/ /buggyapp.appspot.com/calculation?input1=100&input2=200 " を入力し、これら 2 つのパラメーターを入力します。この部分も機能します。

問題は、ユーザーがそのようなリンクをロードし、フォーム内の値の 1 つを変更してから、ボタンをクリックしたときです。(変更された) フォームの値を使用する代わりに、URL の値を使用します。私はそれを修正したいと思います。理想的には、ページが読み込まれた後、URL バーに URL パラメータさえ表示されないようにしたいと思います。

私が間違っていることを見つけるのにどのような情報が必要かわかりません。

以下は、Jinja2 テンプレートである HTML のセクションです。

<form method="post">
  <input value="{{ input1 }}" name="input1">
  <input value="{{ input2 }}" name="input2">
  <button class="submit" type="submit">Calculate</button>
</form>
<p>{{ result }}</p>

Pythonコードは次のとおりです。

def get(self):
  input1 = request.get('input1')
  input2 = request.get('input2')

  # some irrelevant(?) code to set default values on the initial load if there are no URL Params

  result = str(input1+input2) #actual calculation slightly more complicated than this
  template = JINJA_ENVIRONMENT.get_template('calculation.html')
  self.response.write(template.render(vars()))

get ハンドラーまたは post ハンドラーのどちらに計算を入れても、同じように動作するようです。現時点では、単純に一方から他方を呼び出しています。

def post(self):
  input1 = request.get('input1')
  print input1 # even this shows the URL value (if one exists), not form value
  return self.get();

したがって、それを機能させるための次のステップは、フォーム入力の名前を変更して URL パラメータとは異なるようにし、追加のコードを追加して潜在的な入力ソースをマージすることですしかし、それでは本当に私が望むものは得られません。つまり、入力フォームにデータが入力されると、URL パラメータが消えてしまいます。また、この種のリンクを生成するコードの部分も複雑になります。

Python のみのソリューションを希望しますが、javascript を使用することもできます。JavaScriptメカニズムが私が望むことを行うことを暗示するスタックオーバーフローの質問/回答は他にもありますが、私の問題に適用するのに十分なほどよく理解していません。

私は他にも多くのことを間違っていると確信しており、単純化しすぎているか、十分な情報を投稿していない可能性があります。私は学ぶためにここにいるので、火をつけてください。そして、助けてくれてありがとう。

tl;dr- URL パラメータを一度使用してから URL から削除して、後続の投稿でフォーム入力を上書きしないようにするにはどうすればよいですか?

4

1 に答える 1

1

HTTP GET リクエストは通常​​、パラメータを URL に含めます。パラメータを渡す場所が他にないためです (リクエスト本文がないため)。

通常、HTTP POST 要求には要求本文にパラメーターが含まれますが、URL にパラメーターを含めることも可能です。

何らかの Javascript を使用してフォームを投稿しているようです。POST リクエストを使用し、パラメーターを POST 本文に入れていることを確認してください。ほとんどのライブラリは、POST リクエストを発行している限り、自動的に POST 本文にパラメーターを配置します。

編集:

通常、フォームはデフォルトで POST リクエストを発行します。通常、<form>要素には、action送信先の URL を指定する属性があります。ただし、属性がない場合はaction、現在の URL に対して POST 要求を発行します。

あなたの場合、現在の URL にはパラメーターが含まれており、それらはリクエストと共に再度送信されます。いくつかのオプションが必要です。

  1. フォームに を指定してaction、パラメーターが既にアタッチされている同じ URL に送信しないようにします。

  2. リクエスト ハンドラrequest.POST['input1']で、URL の代わりに投稿本文 ( ) からデータを読み取ります。

于 2013-07-03T14:53:44.667 に答える