1

私はdjangoを持っていて、オブジェクトをdjangoセッション変数に保存しようとしていて、リダイレクトされたビューでそれにアクセスしようとしていますが、以下のように表示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そして、リダイレクトされたビューで呼び出された変数に としてアクセスしようとするとPaymentSuccessrequest.session['response']上記のエラーが発生します。

sessionsdjango でオブジェクトを送信/保存するにはどうすればよいでしょうか?

上記では、応答オブジェクトは次の形式になります

{'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, 
}}
4

1 に答える 1

-1

通訳者がこの部分に到達することはありません

request.session['response'] = response

これは、フォームが有効でないか、リクエストのメソッドが POST ではないことを意味します

交換してみる

if request.method == 'POST':

if request.POST:

それが機能しない場合は、セッション フレームワークが壊れていないことを確認するために、request.session['response'] を他の値に設定します。さらにデバッグする必要があります。これがセッションの問題ではないことは 100% 確信しています。

于 2013-08-16T10:57:10.407 に答える