2016-03-29 11 views
0

Normalerweise wird eine Django-Ansicht sieht etwa so aus:Macht das Anfrageobjekt für eine falsche Ansicht in Django optional?

def exciting_possibilities(request, optional_variable=None...): 

ich den Fall, wo die optional_variable in der URL über einen regulären Ausdruck erfasst wird. Es ist eine Benutzerkennung und nur übertragbar über GET als Teil eines E-Mail-Links aufgrund bestimmter geschäftlicher Umstände. Wenn es vorhanden ist, wählt my_view dynamisch eine "Möglichkeit". Wenn es nicht vorhanden ist, stellt es ein identifizierendes Formular dar, damit der Benutzer die Informationen bereitstellen kann.

Lassen Sie uns sagen, dass der Benutzer jetzt POSTs die Informationen in das Formular (vereinfacht):

def identify_user(request): 
    e = ExampleUser(identifier=request.POST.get("optional_variable", None)) 
    e.save() 

Nun, da der Benutzer identifiziert wird, möchte ich exciting_posibilites jetzt zurück gehen, aber natürlich kann ich nicht einfach anrufen :

return exciting_possibilities(optional_variable=e.identifier) 

weil es keine Anfrage gibt (und das Generieren erfordert eine URL, die ich nicht habe).

Soll ich request optional machen (mit =None) und die "Möglichkeitsauswahl" -Logik in eine separate Funktion zerlegen?

Oder wenn ich von identify_user zurückkomme, sollte ich vielleicht die ursprüngliche Anfrage bestehen (obwohl es ein POST ist), und die request.method Prüflogik aus exciting_possibilites herausnehmen?

Antwort

2

Hier können Sie eine Umleitung von einer POST-Ansicht zu einer GET-Ansicht durchführen. In diesem Fall, nachdem Formulardaten gepostet wurden, leiten Sie einfach zu Ihrer exciting_possibilities Ansicht um.

def identify_user(request): 
    e = ExampleUser(identifier=request.POST.get("optional_variable", None)) 
    e.save() 
    return redirect(reverse('exciting_possibilities', kwargs={'optional_variable': e.identifier})) 
Verwandte Themen