第1步:在users应用下views.py中新增实现修改收货地址的视图类
class UpdateDestroyAddressView(LoginRequiredJSONMixin, View):def put(self, request, address_id):"""修改收货地址"""json_dict = json.loads(request.body.decode())receiver = json_dict.get('receiver')province_id = json_dict.get('province_id')city_id = json_dict.get('city_id')district_id = json_dict.get('district_id')place = json_dict.get('place')mobile = json_dict.get('mobile')tel = json_dict.get('tel')email = json_dict.get('email')# 校验参数if not all([receiver, province_id, city_id, district_id, place, mobile]):return HttpResponseForbidden('缺少必传参数')if not re.match(r'^1[3-9]\d{9}$', mobile):return HttpResponseForbidden('参数mobile有误')if tel:if not re.match(r'^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$', tel):return HttpResponseForbidden('参数tel有误')if email:if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):return HttpResponseForbidden('参数email有误')# 判断地址是否存在,并更新地址信息try:Address.objects.filter(id=address_id).update(user=request.user, title=receiver, receiver=receiver,province_id=province_id, city_id=city_id, place=place,district_id=district_id, mobile=mobile, tel=tel,email=email)except Exception as e:logger.error(e)return JsonResponse({'code': RETCODE.DBERR, 'errmsg': '更新地址失败'})# 构造响应数据address = Address.objects.get(id=address_id)address_dict = {"id": address.id, "title": address.title,"receiver": address.receiver, "province": address.province.name,"city": address.city.name, "district": address.district.name,"place": address.place, "mobile": address.mobile,"tel": address.tel, "email": address.email}# 响应更新地址结果return JsonResponse({'code': RETCODE.OK, 'errmsg': '更新地址成功', 'address': address_dict})def delete(self, request, address_id):# 获取默认收货地址的iddefault_address_id = request.user.default_address# 判断用户删除的是否是默认收货地址,如果是,那么将默认收货地址字段设置为None,# 如果不是,那么直接删除try:address = Address.objects.get(id=address_id)if default_address_id == address.id:request.user.default_address_id = Nonerequest.user.save()address.is_deleted = Trueaddress.save()except Exception as e:logger.error(e)return JsonResponse({'code': RETCODE.DBERR,'errmsg': '删除地址失败'})# 返回响应结果return JsonResponse({'code': RETCODE.OK, 'errmsg': '删除地址成功'})
第2步:在users应用下配置路由
path('addresses/<int:address_id>/', views.UpdateDestroyAddressView.as_view()),