【发布时间】:2015-06-15 12:38:12
【问题描述】:
我有一个简单的代码,我在 Django 中对 URL 进行了 POST 调用,其中包含 CSRF 令牌。当我将javascript 代码粘贴到<script> 标签内的模板中时,它可以正常工作,但是一旦我将代码移动到静态文件,我就会收到HTTP 403 响应。这很奇怪!
代码如下:
$(document).ready(function() {
$(".like-button").click(function(event) {
$.ajax({
url: <relative path of URL>,
type: "POST",
data: {
csrfmiddlewaretoken: "{{ csrf_token }}",
// other data items
},
success: function(data, textStatus, jqXHR) {},
error: function(jqXHR, textStatus, errorThrown) {}
});
// other javascript code to toggle like button class
});
});
以下是我在Django 模板中包含静态文件的方法:
{% block javascript %}
{% load static %}
<script type="text/javascript" src="{% static 'app/app.js' %}"></script>
{% endblock %}
文件位于静态目录:
app
├── static
│ └── app
│ └── app.js
和静态设置是:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
注意,我的设置中还没有STATICFILE_DIRS。我可以验证文件是否正在加载和执行,因为console.log() 语句工作得很好。但是,我收到了POST 的 HTTP 403 请求。
【问题讨论】:
-
检查静态文件的权限。使其成为服务器可读(666 权限测试),然后重试。
-
@Randi:我做了
chmod 666,但没有帮助。 -
然后确保
STATIC_ROOT和STATICFILES_DIRS在你的 settings.py 中正确设置。如果您正在开发中,请不要忘记运行manage.py collectstatic命令。如果您提及确切的错误消息和文件结构,也会有所帮助。 -
403也是csrf给出的错误,django推荐docs.djangoproject.com/en/1.7/ref/contrib/csrf通过javascript获取csrf token,我不太确定
-
@Randi:
manage.py collectstatic也无济于事。
标签: javascript django django-templates django-staticfiles