Как получить данные POST в Django - PullRequest
16 голосов
/ 27 сентября 2011

Я пытался интегрировать платежный шлюз в мой сайт в Django. У меня проблемы с получением данных ответа от платежного шлюза.

Платежный шлюз имеет образцы документов для php, которые выглядят так:

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

С учетом URL-адреса, на который перенаправляется платежный шлюз после ввода данных карты и т. Д., Я проверяю, является ли это GET if request.method == "GET", а затем передаю запрос функции. Когда я отлаживаю запрос, я вижу пустой запрос dict. и если я пытаюсь что-то вроде res = request.GET ['paymentid'], я получаю сообщение об ошибке, в котором говорится, что нет ключа с именем paymentid.

Я что-то упускаю из виду? Я все еще новичок в django, поэтому я уверен, что делаю что-то не так.

Ответы [ 2 ]

32 голосов
/ 27 сентября 2011

res = request.GET['paymentid'] повысит KeyError, если paymentid отсутствует в данных GET.

Ваш пример php-кода проверяет, присутствует ли paymentid в данных POST, и устанавливает $payID в '' иначе:

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

Эквивалентом в python является использование метода get() с аргументом по умолчанию:

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

во время отладки это то, что я вижу в response.GET: <QueryDict: {}>, request.POST: <QueryDict: {}>

Похоже, что проблема не в доступе к данным POST, но в нет данных POST . Как вы отлаживаете? Вы используете свой браузер, или это платежный шлюз, доступ к вашей странице? Было бы полезно, если бы вы поделились своим мнением.

Как только вам удастся отправить некоторые данные поста на свою страницу, не должно быть слишком сложно конвертировать пример php в python.

1 голос
/ 27 сентября 2011

У вас должен быть доступ к словарю POST в объекте запроса.

...