Ошибка CSRF при публикации файла в GAE с использованием Django-nonrel

У меня проблема, когда я пытаюсь опубликовать файл.

Он отлично работает, когда я нахожусь на сервере разработки,

но в GAE я могу публиковать только текст, а не файл.

Ниже приведена форма, которую я использую:

<form id="file" method="post" enctype="multipart/form-data" encoding="multipart/form-data" action="{{ upload_url }}">
{% for field in upload_form %}
    <div class="field">
        {{ field.label_tag }}
            <div class="input">
                {{ field }} {{ field.help_text }}
            </div>
            {% if field.errors %}
                <ul class="errors">
                    {% for error in field.errors %}
                        <li>{{ error|escape }}</li>
                    {% endfor %}
                </ul>
            {% endif %}
    </div>
{% endfor %}
<input class="submit" type="submit" value="Upload"/>
</form>

Я считаю, что я включил соответствующие промежуточные программы

# Media middleware has to come first
'mediagenerator.middleware.MediaMiddleware',
# This loads the index definitions, so it has to come first
'autoload.middleware.AutoloadMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',# the "update" middleware must be first
'django.contrib.sessions.middleware.SessionMiddleware', # Session middleware needs to come before Auth middleware, because authentication is handled with sessions.
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.csrf.middleware.CsrfViewMiddleware',# It should come before any view middleware that assume that CSRF attacks have been dealt with.
'django.middleware.csrf.CsrfResponseMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',# the "fetch" middleware must be last
'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware',

Я вижу, что django добавляет скрытый ввод под названием «csrfmiddlewaretoken» с некоторым значением токена csrf на сервере разработки, а также в GAE.

Однако всякий раз, когда я пытаюсь загрузить файл, он выдает сообщение об ошибке csrf.

Я подозреваю, что кэширование вызывает эту проблему, поскольку она началась вскоре после того, как я включил промежуточное программное обеспечение кэширования.

На данный момент я пытаюсь решить эту проблему, изменив порядок промежуточного программного обеспечения, но пока безуспешно.

Кто-нибудь уже сталкивался с моей проблемой?


person taelimoh    schedule 10.02.2012    source источник


Ответы (1)


Включите тег {% csrf_token %} в форму.

person jdickson    schedule 10.02.2012
comment
Это не применимо в данном случае. CsrfResponseMiddleware автоматически добавляет токен csrf - person taelimoh; 16.02.2012