【发布时间】:2019-11-03 13:47:24
【问题描述】:
我试图在单击按钮时在 Javascript 中创建请求,但收到错误 Forbidden (CSRF token missing or incorrect.)。
我在 HTML 模板中包含了{% csrf_token %}:
<form action="/cart" method="POST">
{% csrf_token %}
<button type="button" id="ordered">Place Order</button>
</form>
但我不确定是否必须将其包含在我的 Javascript 请求中:
const request = new XMLHttpRequest();
request.open("POST", "/cart");
// send request
let data = new FormData();
items = localStorage.getItem(user + "items")
total = localStorage.getItem(user + "price")
data.append("items", items)
data.append("total", total)
request.send(data);
在我的views.py:
def cart(request):
if request.method == "POST":
data = request.get_json()
print(f"{data}")
return HttpResponseRedirect(reverse("index"))
else:
return render(request, "cart.html")
【问题讨论】:
-
我不明白您的表单和 JS 代码是如何以任何方式链接的。为什么网站某处表单中的令牌会自动将 csrf 令牌添加到 JS 请求中?
-
我是 Django 新手,请教我如何操作
-
将您的本地存储属性放在隐藏字段中,并在您的视图中以 request.POST['items'] 的形式获取该值,您不需要进行任何 XMLHttpRequest()。如果您使用表单,请通过给定的链接:docs.djangoproject.com/en/2.2/topics/forms
标签: javascript python django ajax csrf