まず第一に、私は一般的にウェブプログラミングに非常に慣れていません。私はオンラインでたくさんのチュートリアルを読みましたが、それらのいくつかは時代遅れであるため、少し混乱しています. したがって、もし私が根本的に間違った道を進んでいるのであれば、正しい道についての提案を歓迎します. とは言っても、これはただの楽しみのためのプロジェクトなので、私が望むものを得る簡単な (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 から削除して、後続の投稿でフォーム入力を上書きしないようにするにはどうすればよいですか?