2013-08-16 3 views
1

У меня есть Джанго и я пытаюсь сохранить объект в Джанго сессии Название переменной, и пытается получить доступ, что в перенаправлены зрения, но его показ keyerror нижеКак сохранить объект в рамках Джанго сессий

def payment(request): 
    if request.method == 'POST': 
     form = CardForm(request.POST) 
     if form.is_valid(): 
      data = form.cleaned_data 
      response = response_from_payment_gateway(data) 
      request.session['response'] = response 
      return HttpResponseRedirect(reverse('paygate:payment_success')) 
    else: 
     form = CardForm(initial={'number':'4242424242424242'}) 
    return render_to_response('payment_form.html',{'form': form}) 


def PaymentSuccess(request): 
    print request.session['response'],"=================>" 
    response = None 
    return render_to_response("payment_success.html", {'response':response}, context_instance=RequestContext(request)) 

Результат

Internal Server Error: /payment/success/ 
Traceback (most recent call last): 
    File "/home/Envs/app/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/home/user/virtualenvironment/apps/app/payment/views.py", line 120, in PaymentSuccess 
    print request.session['response'],"=================>" 
    File "/home/Envs/app/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py", line 46, in __getitem__ 
    return self._session[key] 
KeyError: 'response' 

Так я получаю обратно объект ответа от шлюза оплаты, который содержит сведения о транзакции, и я пытаюсь сохранить, что в session framework variable называется response, как указано выше.

И я пытаюсь получить доступ к переменной под названием response в перенаправленном виде PaymentSuccess как request.session['response'] и получить вышеупомянутую ошибку.

так как мы можем отправить/сохранить объекты в sessions в django?

В выше объекта ответа будет иметь следующий вид

{'status': 'SUCCESS', 'response': <Charge charge id=ch_2OXdxxxxNVw at 0xb508e76cL> JSON: { 
    "amount": 100, 
    "amount_refunded": 0, 
    "balance_transaction": "txxxn_xxxxxxxxO", 
    "captured": true, 
"currency": "usd", 
    "customer": null, 
    "description": null, 
}} 
+0

Вы непосредственно посещаете /payment/success. В этом случае вы получите эту ошибку. –

+0

sorry din't get u, что это значит «непосредственно посещать»?, Если форма действительна, я получаю ответ от шлюза и пытаюсь сохранить этот ответ в сеансе и перенаправлять на другую страницу и пытаться использовать этот сеанс в перенаправленной странице, это я пытаюсь сделать :) –

+0

Не могли бы вы сделать что-то подобное и рассказать мне о выходе. Создайте объект Response и сериализуйте его из django.core.serializers в json-формате и сохраните его в сеансе. а затем получить его из сеанса десериализации его и получить объект и получить доступ к нему. –

ответ

-1

переводчик никогда не достигает эту часть

request.session['response'] = response 

это означает, что либо наша форма не является действительным или метод из запрос не POST

попробовать заменить

if request.method == 'POST': 

с

if request.POST: 

и если он не работает установить request.session [ «ответ»] любое другое значение, просто чтобы убедиться, что структура сессий не нарушена. Вам нужно дополнительно отлаживать, я на 100% уверен, что это не проблема сеанса.

+0

на самом деле, когда я использую' request.session [' response '] = 1', его отлично работает и может печатать это в представлении 'paymentsuccess', но когда я пытался сделать то же самое с« объектом ответа », я имею в виду, когда мы пытаемся сохранить объект ответа вместо целого, его не работает –

+0

Даже после замены с 'request.POST', я получаю то же самое' KeyError: 'response'' –

+0

Обычно я использую сеансы для хранения пользовательских экземпляров в качестве службы входа. Я все еще уверен, что вам нужно еще больше отлаживать. – Bit68