2017-03-03 3 views
0

Ich arbeite mit Django, und bis jetzt hatte ich nur die Notwendigkeit, eine einzelne POST-Anfrage für die Seite zu machen, um zu arbeiten, aber jetzt muss ich mehrere POST-Anfrage machen, und ich weiß nicht, wie man mit a andere POST-Anfrage mit der gleichen Methode.Wie werden verschiedene POST-Anfragen in der klassenbasierten Ansicht behandelt?

Vielleicht erkläre ich mich nicht sehr gut.

Ich habe eine view.py wie

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

Jetzt, mit dieser i Informationen eine Liste von Elementen zu erstellen, und jeder von ihnen hat einen Knopf, eine modale geöffnet, in dem ich mehr Informationen angezeigt werden soll . Die Sache ist, ich könnte einfach alle benötigten Informationen mit der Post-Methode senden, die ich habe, aber ich glaube nicht, dass es richtig ist, zu viele Informationen mit einer Anfrage zu senden, wenn nicht alles davon verwendet werden könnte.

Also, meine Idee ist, dass die Taste zuerst eine neue POST-Anfrage für die Daten, die ich brauche, und dann erstellen Sie das Modal mit ihm. Mein Problem ist, dass ich nicht weiß, wie ich mit der zweiten Anfrage umgehen soll, denn theoretisch werde ich, wenn ich eine andere Anfrage sende, von der post() -Methode behandelt, die ich habe, und sie gibt nicht die Informationen zurück, die ich brauche. Also, wie geht man mit der zweiten Anfrage um? Gibt es eine Möglichkeit, eine andere Methode zu erstellen, um die andere Anfrage zu bearbeiten? oder wie mache ich den Beitrag() zu unterscheiden, welche Anfrage gemacht wurde?

aktualisieren Um dieses Problem zu lösen, sended i einen Wert mit dem JSON vom JS

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

und ich hatte nur if request.POST.has_key('second'): auf der Ansicht zu überprüfen, um zu entscheiden, ob die erste Anforderung oder die zweite war . Es ist ein sehr guter Weg, es zu tun, aber es funktioniert. Wenn jemand einen anderen Weg kennt, dies zu tun, zweifle nicht daran, es zu sagen.

Antwort

0

Sie könnten eine andere Ansicht mit einer eindeutigen URL erstellen oder grundsätzlich tun, was Sie vorgeschlagen haben. Bellow ist eine saubere Implementierung der gleichen Sache:

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 

Dies würde die step_1() Methode standardmäßig ausführen, und step_2(), wenn der POST-Parameter step2 ist. Sie können es beliebig erweitern.

Obwohl ich nicht sicher bin, dass "zu viele Daten in einer Anfrage" wirklich etwas sind, worüber Sie sich Sorgen machen sollten. Könnte sinnvoll sein, wenn Sie "Ich möchte den Benutzer nicht zu viele Informationen auf einmal fragen, also möchte ich es in ein paar Schritten brechen".

Verwandte Themen