簡體   English   中英

如何將網址與django urlconf匹配?

[英]how to match an url with django urlconf?

我正在實施一個名為mercadopago的支付模塊(如paypal),我需要處理一個http請求,當有人通過此類網址中的信息進行付款(IPN)時,該請求會發送到我的網站:

POST / notifications?topic = payment&id = identificador-de-notificacion-de-pago

(mercadopago每次付款時都會向我的網站發送POST請求)

但我不能使它與django網址系統匹配。 我嘗試了以下網址:

    url(r'^notifications$', 'views.notifications', name='notifications'),

我嘗試了不同的組合,並咨詢了apache日志文件,並告訴我錯誤500

移動網址的視圖如下:

    @csrf_exempt
    def IpnProxy(request, **kwargs):
        mp = mercadopago.MP("*********", "*********") 
        paymentInfo = mp.get_payment_info(kwargs["id"])
        if paymentInfo["status"] == 200:
            return paymentInfo["response"]
        else:
            return None

我不知道是否必須配置singals或其他東西。

也許即時通訊錯誤,但mercadopago向我的服務器發出郵件請求,我無法改變它。 這是他們的文檔http://developers.mercadopago.com/documentation/instant-payment-notifications?lang=en_US這里是他們在python中的示例項目: https//github.com/mercadopago/sdk-python/blob/主/例子/即時付款通知/ receive-ipn.py

之后的一切? mark是一個帶有請求GET參數的Query字符串 它們不包含在urls.py的url模式中:

url(r'^notifications/$', view_notifications)

從視圖中的request.GET QueryDict獲取GET參數:

def view_notifications(request):
    topic = request.GET.get('topic')
    print topic

也可以看看:

您正在為Django中的POST錯誤地編碼參數。 POST請求將其參數編碼在請求正文中。 請查看Django的請求和響應對象文檔。 如果您確實想使用您提供的URL,則需要使用GET而不是POST。

---編輯---

嘗試以下操作:在導入通知后的urls.py文件中。

url(r'^notification$', notification, name='notification')

在您的settings.py中:

APPEND_SLASH=False

您幾乎肯定需要轉換CSRF保護,因為您沒有CSRF cookie。

您將能夠按如下方式檢索參數:

def notification(request, **kwargs):
    body = "topic = '{0}'\nid = '{1}'\n".format(request.GET.get('topic'), request.GET.get('id'))
    response = HttpResponse(body, content_type="text/plain")
    return response

測試然后給我們:

hackworth:~$ curl -X POST "http://127.0.0.1:8000/notification?topic=payment&id=identificador-de-notificacion-de-pago"
topic = 'payment'
id = 'identificador-de-notificacion-de-pago'

以上所有都是一個壞主意,因為POST請求通常有一個正文,而Django實際上並不期望POST url上的查詢參數。 此外,現在存在一個安全漏洞,因為必須關閉CSRF保護才能使其工作。

文檔的讀取方式,您將收到來自mercadopago的URL,您可以使用get請求進行檢索。 目前尚不清楚他們是否會向您發送帶有查詢參數的POST請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM