使用Django-nonrel在GAE上发布文件时出现CSRF错误

时间:2012-02-10 14:06:09

标签: django google-app-engine caching 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在开发服务器和GAE上添加了一个名为“csrfmiddlewaretoken”的隐藏输入,其中包含一些csrf标记值。

但是,每当我尝试上传文件时,它都会向我提供csrf错误消息。

我怀疑缓存导致了这个问题,因为它在我加入缓存中间件后很快就开始了。

现在我试图通过重新排序我的中间件来解决这个问题,但到目前为止还没有运气。

以前有人遇到过我的问题吗?

1 个答案:

答案 0 :(得分:0)

在表单的某处包含标记{%csrf_token%}。