是否可以在另一个视图中发送视图的http请求?

时间:2020-10-26 23:10:30

标签: python django django-rest-framework django-views

我想在视图中发送http请求。请求URL与另一个视图相关。像这样:

class View_A(APIView):
    def get(self, request):
       return Response({'foo':'bar'})


class View_B(APIView):
    def post(self, request):
        # Here I would want to send a request to View_A, something like this:
        request_view_A = View_A.as_view().get('URL_FROM_VIEW_A')
        # ...
        return Response({'foo2':'bar2'})

我看到了这个question,它有不同的重点,但是对我不起作用,因为View_A(获取)的http方法不同于View_B的http方法(发布)。

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

class View_B(APIView):
    def post(self, request):
        httpresponse = View_A().get(request)
        # …
        return Response({'foo2':'bar2'})

我们在这里实际上并没有发出HTTP请求,我们只是进行方法调用并使用request作为参数。

话虽如此,通常这意味着您应该“封装”逻辑。因此,通常一个人定义了额外的函数或类(通常不是视图),这些函数或类实现了通常在两个视图中使用的通用逻辑。

答案 1 :(得分:0)

Willem Van Onsem answer的替代方法可以使用python请求包。示例:

import requests 
#...
class View_B(APIView):
    def post(self, request):
        response = requests.get(your_url)
        # ...
        return Response({'foo2':'bar2'})