如何解决在 Django Ajax 中输入数据时出现 HTTP 403 错误?
Posted
技术标签:
【中文标题】如何解决在 Django Ajax 中输入数据时出现 HTTP 403 错误?【英文标题】:How to solve HTTP 403 error on input of data in Django Ajax? 【发布时间】:2020-10-04 04:55:32 【问题描述】:我正在尝试实现搜索功能来搜索我博客的用户。在我的 base.html 中有我的导航栏,在导航栏中我有以下搜索表单:
<form class="form-inline" method="POST">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1">@</span>
</div>
% csrf_token %
<input id="user_search" type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
<ul class="list-group" id="results"></ul>
</div>
</form>
我的 ajax 代码如下:
$('#user_search').keyup(function()
$.ajax(
type: 'POST',
url: "% url 'user-search' %",
data: $(this).serialize(),
dataType: 'json',
success: function(response)
$('#results').html(response['form']);
console.log($('.profile-section').html(response['form']));
,
error: function(rs, e)
console.log(rs.responseText);
,
);
);
我的views.py
搜索视图如下所示:
def user_search(request):
if request.method == 'POST':
search_text = request.POST['search_text']
else:
search_text = ''
users = User.objects.filter(username__icontains=search_text)
context =
'users': users,
if request.is_ajax():
html = render_to_string('feed/user_search.html', context, request=request)
return JsonResponse('form': html)
我的urls.py
的相关部分如下所示:
path('search/', login_required(views.user_search), name="user-search"),
在输入字段中输入数据时,我收到 403 HTTP 错误,表明我没有正确使用 csrf_token,但是我已经像以前一样包含它,并且它在之前的其他时间工作过...... 知道如何解决 403 错误吗?
【问题讨论】:
添加 csrf 令牌或免除 csrf 令牌。 你这是什么意思?我应该从我的 html 中删除 csrf_token 吗?或者我应该在哪里添加另一个,因为我的表单中已经有一个 csrf_token 检查发送到后端的数据,检查是否是 csrf 令牌。不是那么您必须更新 ajax 请求数据以考虑 csrf_token。 我检查了数据并将令牌发送到后端,在我的控制台中它说:Forbidden (CSRF token missing or incorrect.): /feed/search/
所以我认为 csrf 令牌一定是不正确的。我该如何纠正它?
在 keyup 事件中检查查询的长度,如果它小于所需的最小长度(例如 3),则不要查询后端。此外,您可能必须清除显示长度变为
【参考方案1】:
我不得不像这样更改 JS 部分:
$(document).on('keyup', '.user-search-form', function(event)
event.preventDefault();
var input = $('#user_search').val();
console.log(input);
if (input.length > 2)
$.ajax(
type: 'POST',
url: $(this).attr('action'),
data: $(this).serialize(),
dataType: 'json',
success: function(response)
$('#results').html(response['form']);
console.log($('#results').html(response['form']));
,
error: function(rs, e)
console.log(rs.responseText);
,
);
else
$('#results').empty();
);
views.py
中的 python 部分是这样的:
def user_search(request):
if request.method == 'POST':
search_text = request.POST.get('input')
users = User.objects.filter(username__icontains=search_text)
context =
'users': users,
if request.is_ajax():
html = render_to_string('feed/user_search.html', context, request=request)
return JsonResponse('form': html)
现在搜索成功了!
【讨论】:
以上是关于如何解决在 Django Ajax 中输入数据时出现 HTTP 403 错误?的主要内容,如果未能解决你的问题,请参考以下文章
从 django 视图上的 AJAX 调用获取请求时出现错误 404
如何在 Django 模板中使用 Jquery/Ajax 正确刷新 div
如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?
如何在返回的 AJAX 调用上使用 django 模板标签?