추가 및 제거시 사용자 카트 (세션)를 업데이트하는보기 기능을 만들려고합니다.세션 사전에 추가
def shoppingCartAdd(request):
data = json.loads(request.POST['post_data'])
if 'shopping_cart' not in request.session: #<-- create the session dict
request.session['shopping_cart'] = {}
if data["action"] == "add":
with open(MEDIA_ROOT + '/json/products.js', 'r') as json_file:
products = json.loads(json_file.read()) #<-- json file that contains product information
json_file.close()
item = products["products"][data["id"]] #<-- get the item info from json
#If the item is not in the session add it. Otherwise do something.
if data["id"] not in request.session['shopping_cart']:
request.session['shopping_cart'][data["id"]] = item
else:
print('Exists')
#Do something else.
#Remove the item from the dict.
if data["action"] == "remove":
request.session['shopping_cart'].pop([data["id"]], None)
context = {'shoppingCart' : request.session['shopping_cart']}
return JsonResponse(context)
내 문제는 내 사전에 두 개 이상의 항목을 추가 할 수 없다는 것입니다. 내가 여기서 잘못하고있는 것이 확실하지 않습니다. 첫 번째 항목을 클릭하면 세션을 만들고 올바르게 추가하고 다시 추가하려고하면 "존재"가 인쇄됩니다. 하지만 두 번째 항목을 추가하고 다시 추가하려고하면 두 번째 항목에 "exists"가 인쇄되지 않습니다.
다음은 두 항목으로 구성된 세션입니다. 문서에 따르면 print(request.session['shopping_cart'])
{
'38': {'name': 'hergh', 'price': 23, 'active': 'active', 'pk': 38, 'imageURL': '/media/gg_faUCQOg.jpg', 'type': 'sokker', 'amount': 13},
'39': {'name': 'dea', 'price': 1, 'active': 'active', 'pk': 39, 'imageURL': '/media/gg_6ECtbKE.jpg', 'type': 'sokker', 'amount': 1}
}
첫 번째 일 :'json_file.close()'는 사용하는 컨텍스트 관리자 (일명 성명)와 중복됩니다. 그리고 나는 그것을 던지기를 기대하지 않을 것이다. 예외는 던져지고 다음 코드는 실행되지 않을 것이다. – zmo
그렇지 않으면 코드가 원하는대로 수행하고 있습니다. 내 충고는 각 문장 사이에 코드 흐름을 따르는 로그 포인트/출력물을 추가하고, 변수가 어떻게 변하는 지에 따라 다음과 같은 일들이 어디서 잘못되는지 확인하는 것입니다. – zmo
@zmo 디버깅 해 보았습니다. 그러나 실제로 그 결과를 얻지는 못했습니다. 브라우저의 콘솔에서 나는 그것도 단서뿐만 아니라 2 항목을 인쇄 할 것을 볼 수 있습니다. – vandelay