无法将 Ajax GET 调用中的数据值检索到 Django 视图中
Posted
技术标签:
【中文标题】无法将 Ajax GET 调用中的数据值检索到 Django 视图中【英文标题】:Not able to retrieve data values from Ajax GET call into Django view 【发布时间】:2021-09-22 04:05:57 【问题描述】:我正在尝试根据我发送的参数查询员工列表 通过数据内部的ajax调用,但它给了我一个错误(我想要它 仅通过 GET 请求)
Js ajax 函数
$(document).ready(function ()
$(".call_ajax").click(function ()
$.ajax(
url: "/employee_list",
type: "GET",
contentType: "application/json",
dataType: "json",
data:
designation: "soft eng",
,
headers:
"X-CSRFToken": csrftoken,
Authorization: my_token,
,
success: function (data)
console.log(data);
,
error: function (xhr)
//Do Something to handle error
console.log(xhr.error);
,
);
);
我的看法
@csrf_exempt
@api_view(['GET', 'POST', 'PUT', 'DELETE'])
@permission_classes([IsAuthenticated])
@authentication_classes([TokenAuthentication])
def employee_list(request):
if request.method == 'GET':
data_ = request.data['designation']
print(data_)
employees = Employee.objects.all()
students = Student.objects.all()
user = MyUser.objects.all()
serializer = EmployeeSerializer(employees, many=True)
serialized_sudents = StudentSerializer(students, many=True)
multi =
'employees': serializer.data,
'students': serialized_sudents.data
# serializer2 = UserSerializer(user, many=True)
return JsonResponse(multi, safe=False)
我在浏览器中遇到错误
GET http://127.0.0.1:8000/employee_list/ 500 (Internal Server Error)
Django 日志中的错误
File "C:\Users\atif\PycharmProjects\CodePlatform\syntax_fight\api_\views.py", line 42, in employee_list
data_ = request.data['designation']
KeyError: 'designation'
【问题讨论】:
【参考方案1】:这很可能是因为您使用的是GET
,但数据位于正文中。看看this。要尝试解决此问题,请将您的请求方法更改为POST
:
$.ajax(
url: "/employee_list",
type: "POST",
...
【讨论】:
【参考方案2】:request.data 返回请求正文的解析内容。
这类似于标准的request.POST
和 request.FILES
你可以使用request.GET.get('designation')
@csrf_exempt
@api_view(['GET', 'POST', 'PUT', 'DELETE'])
@permission_classes([IsAuthenticated])
@authentication_classes([TokenAuthentication])
def employee_list(request):
if request.method == 'GET':
data_ = request.GET.get('designation') # Here I made changes
print(data_)
employees = Employee.objects.filter(designation=data_) # Map parsed data with database field
students = Student.objects.all()
user = MyUser.objects.all()
serializer = EmployeeSerializer(employees, many=True)
serialized_sudents = StudentSerializer(students, many=True)
multi =
'employees': serializer.data,
'students': serialized_sudents.data
# serializer2 = UserSerializer(user, many=True)
return JsonResponse(multi, safe=False)
或
您可以覆盖 get_queryset 方法。至于查询字符串参数request.data保存的是POST数据,可以通过request.query_params获取查询字符串参数
def get_queryset(self):
data = self.request.query_params.get('designation')
queryset = Model.objects.filter() # use whatever you want filter
return queryset
要了解更多关于 request.data 和 request.query_params,这里是链接 Request parsing link
【讨论】:
但它返回空字典 从 request.GET 中检索数据后,您没有使用数据来过滤数据库。从 request.GET 方法检索数据后,使用该数据过滤数据库。我对答案进行了更改以上是关于无法将 Ajax GET 调用中的数据值检索到 Django 视图中的主要内容,如果未能解决你的问题,请参考以下文章
jquery-无法从我通过ajax调用获得的对象类型响应中检索数据
从通过 jQuery/jQueryMobile 中的 AJAX 调用检索到的 JSON 数据正确设置变量