How to receive POST data in django

hydeous picture hydeous · Sep 27, 2011 · Viewed 99.1k times · Source

I've been trying to integrate a payment gateway into my site in django. I'm having trouble getting the response data from the payment gateway.

The payment gateway has sample docs for php which looks like this :

$ErrorTx = isset($_POST['Error']) ? $_POST['Error'] : '';               //Error Number
$ErrorResult = isset($_POST['ErrorText']) ? $_POST['ErrorText'] : '';   //Error message
$payID = isset($_POST['paymentid']) ? $_POST['paymentid'] : '';     //Payment Id

In the view for the url that the payment gateway is redirecting to after entering card details etc, I'm checking if it's a GET if request.method == "GET" and then passing the request to a function. When I debug the request, I can see an empty query dict. and if I try something like res = request.GET['paymentid'] I get an error that says there's no key called paymentid.

Am I missing something obvious? I'm still pretty new to django, so I'm sure I'm doing something wrong.

Answer

Alasdair picture Alasdair · Sep 27, 2011

res = request.GET['paymentid'] will raise a KeyError if paymentid is not in the GET data.

Your sample php code checks to see if paymentid is in the POST data, and sets $payID to '' otherwise:

$payID = isset($_POST['paymentid']) ? $_POST['paymentid'] : ''

The equivalent in python is to use the get() method with a default argument:

payment_id = request.POST.get('payment_id', '')

while debugging, this is what I see in the response.GET: <QueryDict: {}>, request.POST: <QueryDict: {}>

It looks as if the problem is not accessing the POST data, but that there is no POST data. How are you are debugging? Are you using your browser, or is it the payment gateway accessing your page? It would be helpful if you shared your view.

Once you are managing to submit some post data to your page, it shouldn't be too tricky to convert the sample php to python.