我想从外部API (https://example.com/consumers) 获取数据。我可以像这样构建我的urls.py吗?
url(r'^(?P<test.com/consumers)>[0-9]+)$/', views.get, name="get"),
或者你还有其他好的想法吗?
谢谢。
我想从外部API (https://example.com/consumers) 获取数据。我可以像这样构建我的urls.py吗?
url(r'^(?P<test.com/consumers)>[0-9]+)$/', views.get, name="get"),
或者你还有其他好的想法吗?
谢谢。
我认为最好创建自己的URL端点,将其映射到视图,由视图发出请求外部API。
# urls.py
url(r'^external-api/$', external_api_view)
# views.py
import requests
import time
from rest_framework import status
from rest_framework.response import Response
MAX_RETRIES = 5 # Arbitrary number of times we want to try
def external_api_view(request):
if request.method == "GET":
attempt_num = 0 # keep track of how many times we've retried
while attempt_num < MAX_RETRIES:
r = requests.get("https://example.com/consumers", timeout=10)
if r.status_code == 200:
data = r.json()
return Response(data, status=status.HTTP_200_OK)
else:
attempt_num += 1
# You can probably use a logger to log the error here
time.sleep(5) # Wait for 5 seconds before re-trying
return Response({"error": "Request failed"}, status=r.status_code)
else:
return Response({"error": "Method not allowed"}, status=status.HTTP_400_BAD_REQUEST)
只是一个例子。你也可以将其作为基于类的视图来完成。
无论你想要实现什么,这段代码都不会起作用。
首先,?P<name>
结构只是一种给组命名的方式。它不接受字符 '.'、'/' 和 ')'。因此正确的名称应该是类似于 ?P<consumer_id>
。
其次,即使你在正则表达式中纠正了错误(例如:r'^(?P<consumer_id>[0-9]+$)/'
),它也只会匹配任何形如 YOURDOMAIN.COM/<integer_number>/
的 URL。
我建议你先学习Python 正则表达式的工作原理。