1. ホーム
  2. python

[解決済み] Djangoです。CSRF トークンがないか、間違っている

2022-02-11 13:06:55

質問

エラーは次の場所にあります。 http://127.0.0.1:8000/fileupload/form.py

私はdjangoのバージョン1.3を持っています。他の方の質問にあるように、localhost:8000を指定してみましたが、私の場合はうまくいきませんでした。 私はファイルアップロードフォームを持とうとしていますが、form.pyがCSRFトークンを持っていないというエラーが表示されます。

form.py。

class UploadFileForm(forms.Form):

    title = forms.CharField(max_length=50)
    file  = forms.FileField()

views.py。

def upload_file(request):

    c = {}
    c.update(csrf(request))

    if (not request.user.is_authenticated()) or (request.user == None):
      return HttpResponseRedirect("/?error=11")


    if request.method == 'POST':
      form = c['UploadFileForm'] = UploadFileForm(request.POST, request.FILES,  c, context_instance=RequestContext(request))

      if c['UploadFileForm'].is_valid():
        handle_uploaded_file(request.FILES['file'])
        return HttpResponseRedirect('/success/url/')

    else:
        form = c['UploadFileForm'] = UploadFileForm()
    return render_to_response('fileupload/upload.html', {'form': c['UploadFileForm']})

upload.html。

{% block main_content %}


  <form action="fileupload/form.py" enctype="multipart/form-data" method="POST">
    {% csrf_token %}
    <table>

      <tr><td>Title:</td><td><input type="text" name="title" /></td></tr>
      <tr><td>File:</td><td><input type="file" name="file" /></td></tr>
    </table>
      <input type="submit" value="Submit" class = "float_right button_input" />

  </form> 

{% endblock main_content %}

私は非常に困っています、試してみるためにいくつかのことを教えてください。ありがとうございます。

解決方法は?

を渡す必要があります。 RequestContext を render_to_response で使用します。 csrf_token

この場合 : ( views.py )

from django.template import RequestContext

...

return render_to_response('fileupload/upload.html', {'form': c['UploadFileForm']},  RequestContext(request))
# Added RequestContext

これはcsrfのトークンをテンプレートに渡します。