如何从 url 获取变量

How to get variables from a url

所以在使用 paypalrestsdk 时我已经转到了 paypal,提交了订单并且重定向 url 是:

http://localhost:8000/confirm_order?paymentId=XYZ&token=123&PayerID=ABC

如何从 url 中动态获取这些值??

有几种方法可以将数据传递到服务器。您在这里描述的是 GET [Django-doc] 参数。

如果您在视图中检查 request.GET object,您会得到一个(可能是空的)QueryDict [Django-doc] object。它或多或少充当字典(除了一个键可以包含多个值等)。例如:

def some_view(request):
    paymentId= request.GET['paymentId']
    token = request.GET['token']
    payerID = request.GET['PayerID']
    # do some processing
    # ...
    pass

除了GET参数外,客户端和服务器之间的数据传输还有其他方式:

  1. URL 本身(这可以包含一些数据);
  2. request.POST(这些参数未在 URL 中编码,而是在请求的 header 中编码);
  3. request.FILES 包含上传文件的方法;
  4. request.COOKIES cookie数据,在header中发送,我们可以在session期间发送cookies来存储一些数据;和
  5. request.META 这在请求中包含 headers。

就这么简单:

对于GET请求:

// ...inside you view function

if request.method == 'GET':
    // GET action
    paymentId = request.GET['paymentId']
    print('Payment ID:', paymentId)
    ...

对于POST请求:

if request.method == 'POST':
    // POST action
    paymentId = request.POST['paymentId']
    print('Payment ID:', paymentId)
    ...

在这种情况下,如果 URL 中没有查询参数,它将中断,

而不是这个

def some_view(request):
  paymentId= request.GET['paymentId']
  token = request.GET['token']
  payerID = request.GET['PayerID']
  # do some processing
  # ...
  pass

尝试像这样更改代码

def some_view(request):
  paymentId= request.query_params.get('paymentId')
  token = request.query_params.get['token']

  payerID = request.GET.get('PayerID')
  # do some processing
  # ...
  pass

在这种情况下,即使您不发送查询参数,那些变量也包含 None