从具有已修改请求的另一个视图中调用视图



我在Django中有一个视图_a,我想从另一个视图_B获取数据。我不能只使用B中的函数或修改B,因为它是我导入的外部内容。因此,在view_A中,我会创建一个请求对象,并将其传递给view_B,如下所示:

from django.http import HttpRequest
class view_A(APIView):
def post(self, request):
new_request = HttpRequest()
new_request.method = 'POST'
new_request.content_type = 'application/json'
new_request.POST = {"var1": var1, "var2": var2}
response = view_B(new_request)
return(response)

然而,当它返回时,我似乎没有正确设置请求的主体:

{"var1":["This field is required."],"var2":["This field is required."]}

知道我哪里搞砸了吗?

我建议更改以下代码,并重定向到新视图。

from django.shortcuts import redirect, render, reverse
class view_A(APIView):
def post(self, request, *args, **kwargs):
if request.method == "POST":
data = request.POST.dict()
var1 = data['var1']
var2 = data['var2']
# do something with var1 and var2
# or pass data to another view
return redirect(reverse('your_url_name', data))

urls.py

path('your_path/', views.view_B.as_view(), name='your_url_name'),

正如一些代码建议一样,我总是先检查request.method,然后相应地编写逻辑。此外,在命名类视图时,我会使用大写字母和no_作为分隔符-->class ViewA(APIView)还试图在名称中更具体地说明类应该做什么。看起来这个类或post请求实际上并没有做任何事情。

您在这里真正想做的是重定向到view_B,将上下文数据传递给它,然后可以在view_B中访问这些数据。

最新更新