我想链接API的调用,我所拥有的是:
from django.views import View
from rest_framework.views import APIView
from rest_framework.response import Response
class ChildAPI(APIView)
def get(self, request):
store_id = request.GET.get('store_id')
prodcuts = ProductsModel.objects\
.filter(store_id=store_id)\
.annotate(SUM('price'))... etc
x = products['price__sum']
y = products['tax__sum']
现在,而不是从ChildAPI
返回响应,我想通过x
将y
和post
参数传递给ParentAPI
返回响应为:
class ParentAPI(APIView):
def post(self, request):
store_id = request.POST.get('store_id')
x = request.POST.get('x')
y = request.POST.get('y')
AwesomeModel.objects.filter(...).update(x=x,y=y)
return Response({"code": 1, "message": "Updated"})
我正在读Calling a REST API from Django view,
由于无法通过post
传递参数,并且url
是通过requests
命中的,因此如果没有domainname.com
不能做到这一点,即就像我们通过namespace
一样来自Django templates
,格式为:
<form method="post" action="{% url 'product:update-product' %}">
<input type="hidden" value="{{ x }}" name="x">
<input type="hidden" value="{{ y }}" name="y">
<input type="submit" value="Update">
</form>
注意:我在另一个Django应用ParentAPI url
文件中使用了urls
模式,
我们从另一个函数中调用一个函数的方式可以从另一个通过post
包装的参数中调用一个API
这里ParentAPI
也被独立调用,因此我只想通过request
传递包装到post
中的参数。无法通过它们来充当ParentAPI.post(request, x=x)
如果ParentAPI
被独立命中,那么我会创建一个带有可变自变量参数**kwarg
的函数并调用该函数。
如果这样做,我将拥有:
class ParentAPI(APIView):
def post(self, request, *args, **kwargs):
x = request.POST.get('x')
if not x:
x = kwargs['x']
基本上,我想发送x,y
包装的request
。因此ParentAPI
可以以request.POST.get('x')
或reques.POST['x']
答案 0 :(得分:2)
做这样的事情,
from rest_framework.views import APIView
class Parent(APIView):
def post(self, request, *args, **kwargs):
return Response(data={"store_id": kwargs['store_id']})
class ChildAPI(APIView):
def get(self, request, *args, **kwargs):
store_id = request.GET.get('store_id')
parent = Parent()
return parent.post(request, store_id=store_id)
访问子api /child/?store_id=12323
,您将获得Parent
API的响应