django - 无法在 django 中使用 ajax 发布请求检索表单数据
问题描述
我正在尝试从 ajax 发布请求中检索 views.py 中的表单数据 {orderId, email}。我已经使用了 csrf_token。但是变量在 httpResponse 中没有。以下是views.py 代码:
@csrf_exempt
def track(request):
if request.method == 'POST':
orderId = request.POST.get('order_id')
email = request.POST.get('email')
return HttpResponse(f"{orderId} and {email}")
以下是ajax发布请求:
$('#trackerForm').submit(function(event){
event.preventDefault();
$('#items').empty();
var formData = {
'order_id': $('input[name=order_id]').val(),
'email': $('input[name=email]').val(),
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
encode: true
};
$.ajax({
type: 'POST',
url: '/shop/track/',
data: 'formData'
})
.done(function(data){
console.log(formData);
console.log(data);
})
});
我得到了 console.log(formData) 的输出。但我没有得到 console.log(data) {the response from views.py} 它在控制台屏幕上显示为“None and None”,这意味着 orderId 和 email 的值为 None。请回复它。这将是一个很大的帮助。
解决方案
豁免 csrf 不是一个好主意。相反,您可以使用 JQuery 表单submit()
或serialize()
. 在您的模板中并为其form
提供一个 id,然后在 ajax 函数中,通过 ID 使用 jquery 元素选择访问该表单。如下:
$.ajax({
url: ajax_link,
data: $('#your_form_id').serialize(),
type: 'POST',
success: function(res) {
console.log(res);
}
});
在您的情况下,views.py
您可以通过使用来确定请求是否是 ajax 调用
if request.is_ajax():
。但无需提交表格。您可以使用 ajax 方法将任何数据作为 python dict()
(或 javascript )传递。object
例如,在 ajax 函数中,您可以拥有:data: {'email': $('#email_field').val(), 'oreder_id': $('#oreder_id').val() }
你里面的代码没问题views.py: orderId = request.POST.get('order_id'), email = request.POST.get('email')
,但是如果你有两个输入字段,属性name
等于你提交的表单email
,它就可以工作。order_id
推荐阅读
- c++ - 未找到 Boost 库 | C++
- javascript - 从 javascript 在 html 模板标签上显示数据
- python - 通过“热键”关闭和打开过程
- javascript - 地图方法函数javascript
- python - Pandas 计算一个组的常见发生百分比
- c++ - 使用对装饰对象的成员引用在 C++ 中实现装饰器类未按预期工作
- vb.net - LiveCharts CartesianChart 仅显示每个系列的单个值
- r - 闪亮的 checkFunc 没有触发 valueFunc
- java - Java FX 8 TextArea 程序显示错误
- .net-core - 我正在使用 .net core 3.x (LTS) nuget 想要安装 5.0,如何确保它不会安装非 LTS 版本?