私のウェブサイトには、データベースにエントリを作成するフォームがあります。したがって、ページを更新するたびに、最初に次のメッセージが表示されます。
The page that you're looking for used information that you entered.
Returning to that page might cause any action you took to be repeated.
Do you want to continue?
明らかに、データベースに同じ情報を2回以上入れたくありません。
念のため:これは私のコードです(削除する必要のあるがらくたがたくさんあることを私は知っています):
#views.py
@login_required
def subject(request,username, subject_name):
subject_id = Subjects.objects.filter(user = request.user).get(name=subject_name)
#Upload form
if request.method == "POST":
if "upload-b" in request.POST:
form = ContentForm(request.POST, request.FILES, instance=subject_id)
if form.is_valid(): # need to add some clean functions
up_f = FileDescription.objects.get_or_create(subject=subject_id,
subject_name=subject_name,
file_type=request.POST['file_type'],
file_uploaded_by = username,
file_name=request.POST['file_name'],
file_description=request.POST['file_description'],
image = request.FILES['image'],
)
form = ContentForm()
#Show uploaded files with respect to clicked session (Homework, Class , Random ... )
homework_files = Homework.homework.filter(subject_name__exact=subject_name,
file_uploaded_by__exact=username)
class_files = ClassPapers.classpapers.filter(subject_name__exact=subject_name)
random_files = RandomPapers.randompapers.filter(subject_name__exact=subject_name,
file_uploaded_by__exact=username)
return render_to_response('subject_content.html', {'form':form,
'subject_name': subject_name,
'class_files': class_files,
'homework_files': homework_files,
'class_files': class_files,
'random_files': random_files,
},
context_instance=RequestContext(request))
#forms.py:
class ContentForm(forms.ModelForm):
file_name =forms.CharField(max_length=255, widget=forms.TextInput(attrs={'size':20}))
file_description = forms.CharField(widget=forms.Textarea(attrs={'rows':4, 'cols':25}))
class Meta:
model = FileDescription
exclude = ('subject', 'subject_name', 'file_uploaded_by')
#template
<div id="sbj-creation-frm">
<h3>Upload File</h3>
<form action="." method="post" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit" name="upload-b" class="btn-create" />
</form>
</div>
このメッセージはブラウザからのものです。 POSTリクエストの結果として表示されたページを更新しようとすると、いつでも表示されます。
コードとは関係ありません。ブラウザは、ページを更新しようとするすべてのWebサイトに同じメッセージを表示します(ヒット F5 たとえば)前のPOSTリクエストの結果として表示されました。
これが発生しないようにするには、すべてのPOSTリクエストが完了時に別のビューにリダイレクトされるようにし、テンプレート自体をレンダリングしないようにします。
私のために働いている同じページにリダイレクトします:
header("Location: #");
挿入後にページを現在のページにリダイレクトするだけで、すべての値がクリアされ、重複レコードが追加されなくなります。
例:
protected void btnAdd_Click(object sender, EventArgs e)
{
//your code
Response.Redirect("Currentpage.aspx",true);
//or
Response.Redirect(Request.Url.AbsoluteUri);
}