在没有表单的 Django 中处理 Ajax 请求
Handling Ajax request in Django without form
我的 html 中有一个列表,其中有一个 ajax 请求将数据度量值传递给 views.py :
<ul>
<li><a class="measure" href="#" data-measure="m_0001">Measure_0001</a></li>
<li><a class="measure" href="#" data-measure="m_0002">Measure_0002</a></li>
<li><a class="measure" href="#" data-measure="m_0003">Measure_0003</a></li>
</ul>
Javascript
$(".measure").click(function(){
var measure = {'measure': this.getAttribute("data-measure")};
$.ajax({
url : "prueba/", // the endpoint
type : "POST", // http method
data : measure,
success : function (data) {
//Success
}
});
在这个文件中
views.py 我想获取值以查询我的数据库。
def prueba(request):
response_data = '{}'
if request.user.is_authenticated:
if request.method == 'POST':
measure = request.POST.get('measure', None)
//request to database
return JsonResponse(response_data, safe=False)
else:
response_data = '{"nothing to see": "this is not happening"}'
return JsonResponse(response_data, safe=False)
当我点击列表的项目时,我有这个错误:
"禁止(CSRF 令牌丢失或不正确。)"
我不明白我必须把 csrf_token 放在哪里才能让它工作。
有什么建议吗?
在您的 ul
标签内添加一个隐藏的输入元素,其值为 {{ csrf_token }}
,如下所示:
<ul>
<input type='hidden' name='csrfmiddlewaretoken' value='{{ csrf_token }}' />
<!-- your list elements -->
</ul>
然后在您的 jQuery 中执行此操作:
$("ul .measure").on('click',function(){
var measure = {
'measure': this.getAttribute("data-measure"),
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
};
// your ajax call
});
我的 html 中有一个列表,其中有一个 ajax 请求将数据度量值传递给 views.py :
<ul>
<li><a class="measure" href="#" data-measure="m_0001">Measure_0001</a></li>
<li><a class="measure" href="#" data-measure="m_0002">Measure_0002</a></li>
<li><a class="measure" href="#" data-measure="m_0003">Measure_0003</a></li>
</ul>
Javascript
$(".measure").click(function(){
var measure = {'measure': this.getAttribute("data-measure")};
$.ajax({
url : "prueba/", // the endpoint
type : "POST", // http method
data : measure,
success : function (data) {
//Success
}
});
在这个文件中 views.py 我想获取值以查询我的数据库。
def prueba(request):
response_data = '{}'
if request.user.is_authenticated:
if request.method == 'POST':
measure = request.POST.get('measure', None)
//request to database
return JsonResponse(response_data, safe=False)
else:
response_data = '{"nothing to see": "this is not happening"}'
return JsonResponse(response_data, safe=False)
当我点击列表的项目时,我有这个错误:
"禁止(CSRF 令牌丢失或不正确。)"
我不明白我必须把 csrf_token 放在哪里才能让它工作。
有什么建议吗?
在您的 ul
标签内添加一个隐藏的输入元素,其值为 {{ csrf_token }}
,如下所示:
<ul>
<input type='hidden' name='csrfmiddlewaretoken' value='{{ csrf_token }}' />
<!-- your list elements -->
</ul>
然后在您的 jQuery 中执行此操作:
$("ul .measure").on('click',function(){
var measure = {
'measure': this.getAttribute("data-measure"),
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
};
// your ajax call
});