web-dev-qa-db-ja.com

「そのページに戻ると、実行したアクションが繰り返される可能性があります」-Django

私のウェブサイトには、データベースにエントリを作成するフォームがあります。したがって、ページを更新するたびに、最初に次のメッセージが表示されます。

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>
12
Vor

このメッセージはブラウザからのものです。 POSTリクエストの結果として表示されたページを更新しようとすると、いつでも表示されます。

コードとは関係ありません。ブラウザは、ページを更新しようとするすべてのWebサイトに同じメッセージを表示します(ヒット F5 たとえば)前のPOSTリクエストの結果として表示されました。

これが発生しないようにするには、すべてのPOSTリクエストが完了時に別のビューにリダイレクトされるようにし、テンプレート自体をレンダリングしないようにします。

15
Burhan Khalid

私のために働いている同じページにリダイレクトします:

header("Location: #");
1
Faysal Hafidi

挿入後にページを現在のページにリダイレクトするだけで、すべての値がクリアされ、重複レコードが追加されなくなります。

例:

protected void btnAdd_Click(object sender, EventArgs e)
{
 //your code 
 Response.Redirect("Currentpage.aspx",true);

 //or 
 Response.Redirect(Request.Url.AbsoluteUri);
}
0
user3441369