Jquery 如何在django中访问基于类的视图的put请求中的数据表单
我目前在访问存储在数据表单中的数据时遇到问题。我将通过ajax传递它,并通过views.py中的put方法接收它。问题是我只知道如何通过request.POST[“item_name”]和file request.FILES[“photo”]访问它。但显然,这在put请求中不起作用。有人能帮忙吗 jQueryJquery 如何在django中访问基于类的视图的put请求中的数据表单,jquery,python,ajax,django,Jquery,Python,Ajax,Django,我目前在访问存储在数据表单中的数据时遇到问题。我将通过ajax传递它,并通过views.py中的put方法接收它。问题是我只知道如何通过request.POST[“item_name”]和file request.FILES[“photo”]访问它。但显然,这在put请求中不起作用。有人能帮忙吗 jQuery const form = new FormData(); const name = $('#edit-product-name-input-' + productID).val(); co
const form = new FormData();
const name = $('#edit-product-name-input-' + productID).val();
const quantity = $('#edit-product-quantity-input-' + productID).val();
const description = $('#edit-product-description-input-' + productID).val();
const price = $('#edit-product-price-input-' + productID).val();
const photo = $('#edit-product-photo-' + productID);
if (extractPhoto(photo)) {
form.append('photo', extractPhoto(photo));
}
form.append('name', name);
form.append('price', price);
form.append('description', description);
form.append('quantity', quantity);
form.append('product_id', productID);
attachCSRF();
$.ajax({
url: window.location.pathname + "products/",
method: "PUT",
data: form,
contentType: false,
processData: false,
success: function (data) {
alert(data["product"] + " edited");
location.reload();
},
error: function (data) {
if (data.responseJSON) {
displayErrors(data.responseJSON);
}
}
视图.py
@staticmethod
def put(request, stall_id):
dict = {
"product_name": request.body('name'),
"description": request.body('description'),
"price": request.body('price'),
"quantity": request.body('quantity')
}
errors = handle_errors(dict)
print(errors)
if not errors:
product = Product.objects.get(id=request.POST.get("product_id"))
product.name = dict["product_name"]
product.description = dict["description"]
product.price = dict["price"]
product.quantity = dict["quantity"]
if 'photo' in request.FILES:
product.photo = request.FILES.get('photo')
product.save()
data = {
"product": product.name
}
return HttpResponse(
json.dumps(data),
content_type="application/json"
)
return HttpResponse(
json.dumps(errors),
content_type="application/json",
status=400
)
通过
x-www-form-urlencoded
发送数据时,它看起来像是在request.body
下以字节的形式到达的
**不要在您的代码中使用csrf\u豁免
,我只是出于测试目的使用它**
以下内容适合我:
from django.http import QueryDict
class Some(View):
@csrf_exempt
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, *kwargs)
def put(self, request, *args, **kwargs):
data = QueryDict(request.body)
print(data)
return HttpResponse("Worked!")
data
变量是一个dict
,因此您可以在put中执行此操作:
form = {
"product_name": data.get('name'),
"description": data.get('description'),
"price": data.get('price'),
"quantity": data.get('quantity')
}
我也遇到了同样的问题,而且做
QueryDict(request.body)
对我不起作用
最后我做的是:
from django.http.multipartparser import MultiPartParser
put_data = MultiPartParser(request.META, request, request.upload_handlers).parse() # it will return a tuple object
put = put_data[0] # it will give you the QueryDict object with your form data.
您好,谢谢您的回复!我编辑了这个,实际上我在用ajax发送表单。它还会继续工作吗?在我的表单中,我有一个想象,这可能是导致我出现问题的原因。请使用
QueryDict
对象解析表单request.body
,看看是否有效,但请记住使用dict语法[key\u name]
或.get(key\u name)更新代码以访问数据
。哦,对了,我完全忘了。谢谢!我尝试将其作为一个函数访问,该函数带有一个参数,用于PUT
和POST
方法,数据应该以相同的方式传递,尝试print request.data
并查看数据即将到来。用于PUT和POST使用request.data['keyName']
。