2017-03-03 6 views
0

私はDjangoと一緒に作業していますが、今まではページが動作するようにPOSTリクエストを1回だけ行う必要がありましたが、今は複数の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を持っており、それらのそれぞれは、私はより多くの情報を表示するモーダルを開くボタンがあります。問題は、私が持っているポスト方法で必要なすべての情報を送ることができるだけですが、すべての情報を使用できないときに、1つのリクエストであまりにも多くの情報を送信するのが正しいとは思わないです。

私の考えは、ボタンが最初に必要なデータに対して新しいPOSTリクエストを作成し、それを使ってモーダルを作成することです。私の問題は、理論上、別のリクエストを送信すると、私が持っているpost()メソッドによって処理され、必要な情報が返されないため、2番目のリクエストを処理する方法がわかりません。だから、どのように2番目の要求を処理するには?他のリクエストを処理する別のメソッドpost()を作成する方法はありますか?またはどのようにして投稿がなされたのかの違いに投稿()しますか?この問題を解決するための

更新 は、私はJS

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

からJSONで値をsendedでは、私は最初の要求または二だったかどうかを判断するためにビューif request.POST.has_key('second'):をチェックしなければなりませんでした。それは非常に重大な方法ですが、機能します。誰かがこれを行う別の方法を知っているなら、それを言うことを疑うことはありません。

答えて

0

独自のURLを持つ別のビューを作成することもできますし、基本的に提案したことを行うこともできます。ベローは同じものの、よりクリーンな実装である:POSTパラメータstep2とき

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_2()step_1()メソッドを実行します。あなたは好きなだけそれを伸ばすことができます。

「1つのリクエストで多すぎるデータ」が本当に気になるものではありませんが、 「あまりにも多くの情報をユーザーに一度に尋ねたくないので、いくつかのステップに分けてほしい」という意味ならば理にかなっています。

関連する問題