我正在使用Django,直到现在我只需要为页面提供单个POST请求,但现在我需要发出多个POST请求,而且我不需要知道如何使用相同的方法处理不同的POST请求。
也许我没有很好地解释我。
我有一个像。
的view.pyclass List(View):
def post(self, request):
#Receive the JSON
return JsonResponse(data,safe=False) #data is a list of dicts []
def get(self,request):
return render(request,'list.html')
list =List.as_view()
现在,我将返回信息以创建元素列表,并且每个元素都有一个按钮,用于打开模式,我想要显示更多信息。问题是,我可以使用我所拥有的post方法发送所需的所有信息,但是如果没有全部信息可以使用,我不认为在一个请求中发送太多信息是正确的。
所以,我的想法是按钮首先为我需要的数据发出新的POST请求,然后用它创建模态。我的问题是我不知道如何处理第二个请求,因为理论上,如果我发送另一个请求,将由我所拥有的post()方法处理,并且它不会返回我需要的信息,那么,如何处理第二个请求?有没有办法创建另一个方法post()来处理其他请求?或者我如何使post()区别于提出了哪个请求?
更新 为了解决这个问题,我使用JS中的JSON发送了一个值
data: {
csrfmiddlewaretoken : csrftoken,
value : nemp,
second: "second"
}
我只需要查看视图if request.POST.has_key('second'):
以确定是第一个请求还是第二个请求。这是一种非常好的方式,但它确实有效。如果有人知道另一种方法,那就不要怀疑了。
答案 0 :(得分:0)
您可以使用唯一网址创建另一个视图,或者基本上按照您的建议进行操作。贝娄是一个更干净的实现同样的事情:
class List(View):
def post(self, request, *args, **kwargs):
method = getattr(self, 'step_' + request.POST.get('step', ''), self.step_1)
return method(request, *args, **kwargs)
def step_1(self, request, *args, **kwargs):
pass
def step_2(self, request, *args, **kwargs):
pass
默认情况下执行step_1()
方法,POST参数step_2()
为step
时执行2
。你可以随意扩展它。
虽然我不确定“一个请求中的数据太多”确实是你应该关注的事情。如果您的意思是“我不想立即向用户询问太多信息,那么我可能会将其分解为几步”。