2017-01-02 1 views
1

추가 및 제거시 사용자 카트 (세션)를 업데이트하는보기 기능을 만들려고합니다.세션 사전에 추가

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} 
} 
+1

첫 번째 일 :'json_file.close()'는 사용하는 컨텍스트 관리자 (일명 성명)와 중복됩니다. 그리고 나는 그것을 던지기를 기대하지 않을 것이다. 예외는 던져지고 다음 코드는 실행되지 않을 것이다. – zmo

+0

그렇지 않으면 코드가 원하는대로 수행하고 있습니다. 내 충고는 각 문장 사이에 코드 흐름을 따르는 로그 포인트/출력물을 추가하고, 변수가 어떻게 변하는 지에 따라 다음과 같은 일들이 어디서 잘못되는지 확인하는 것입니다. – zmo

+0

@zmo 디버깅 해 보았습니다. 그러나 실제로 그 결과를 얻지는 못했습니다. 브라우저의 콘솔에서 나는 그것도 단서뿐만 아니라 2 항목을 인쇄 할 것을 볼 수 있습니다. – vandelay

답변