我的第一个Python电商项目遇到的坑
1、后端URL在浏览器报错:Object of type ImageFieldFile is not JSON serializable
数据库表中有图片格式的数据,在后端构造json数据时要转str,否则不能序列化
在代码块中img对象没有被json序列化,要str(img对象)才可以
2、delete请求方式,报500错误:delete() got an unexpected keyword argument ‘user_id’
获取了一个意外的键,原因是,URL中除了有path转换器的参数外,还有查询字符串的参数,需要有可变参数*args, **kwargs来接收前端的发来的数据
前端ajax
$('.delect').on('click', function(){
var delete_id = $(this).attr('data');
console.log(delete_id);//ok
var delete_url = "http://127.0.0.1:8000/v1/cart/"+ cart_username+"/del?" + 'cart_id=' + delete_id;
//var delete_url = "http://0.0.0.0:8000/v1/cart/del/"+ cart_username+"?" + 'cart_id=' + delete_id;
$.ajax({
// 请求方式
type:"delete",
url: delete_url,
data: {'delete_id': delete_id, },
beforeSend: function(request) {
request.setRequestHeader("Authorization", token);
},
success:function (result) {
if (200 == result.code){
alert('删除成功');
window.location.reload()
}else{
alert('删除失败');
}
}
后端view
class CartDelViews(View):
#/cart/user/goods_id-----点击购物车宝贝,进入详情页
#/cart/user/del/cart_id----删除购物车id为x的宝贝
#/cart/user/add?cart_id=1----增加购物车id为x的宝贝,(增加的同时,商品表库存-1,判断是否有库存)
def delete(self,request,*args, **kwargs):
#delete请求方式需要新建一个字典,然后才能获取相应属性
DELETE = QueryDict(request.body)
delete_id = DELETE.get('delete_id')
print('$$$$$$$$$$$$$$$$',delete_id)
try:
cart_good=ShoppingCart.objects.get(id=delete_id)
cart_good.delete()
except:
result = {'code': 10306, 'error': 'delete_id不存在'}
return JsonResponse(result)
return JsonResponse({'code': 200})