2017-03-03 42 views
0

我正在使用Django,直到現在我只需要做一個POST請求的頁面工作,但現在我需要做出多個POST請求,並且我不知道如何處理不同的POST請求使用相同的方法。如何在基於類的視圖上處理不同的POST請求?

也許我沒有解釋得很好。

我有一個像

class 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() 

一個view.py現在,有了這個,我回到創建元素列表的信息,並且他們每個人都有打開一個模式,我想表現出更多的信息按鈕。問題是,我可以發送所需的所有信息,但是我不認爲用一個請求發送太多的信息是正確的,但並不是所有的信息都可以使用。

所以,我的想法是,該按鈕首先爲我需要的數據發出新的POST請求,然後用它創建模態。我的問題是我不知道如何處理第二個請求,因爲從理論上講,如果我發送另一個請求,將由我擁有的post()方法處理,並且它不會返回我需要的信息,那麼,如何處理第二個請求呢?有沒有辦法創建另一個方法post()來處理其他請求?或者我如何讓帖子()區別哪個請求發生了變化?

更新 爲了解決這個問題,我從JS

data: { 
    csrfmiddlewaretoken : csrftoken, 
    value : nemp, 
    second: "second" 
} 

sended與JSON的值,我只需要檢查的觀點if request.POST.has_key('second'):來決定,如果是第一次請求或第二。這是一個非常簡單的方式來做到這一點,但它的工作原理。如果有人知道另一種方式來做到這一點,不要懷疑這麼說。

回答

0

你可以用一個獨特的URL創建另一個視圖,或者基本上做你的建議。貝婁是一個更清潔的實現同樣的事情:

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()方法,並step_2()當POST參數step2。您可以儘可能多地擴展它。

雖然我不確定「一個請求中的數據太多」確實是您應該關注的問題。如果你的意思是「我不想一次詢問用戶太多的信息,所以我想把它分成幾步」。