15 Stimmen

Die Verwendung von cleaned_data in Formularen in Django

Was ist der Sinn darin, cd = form.cleaned_data zu setzen, bevor man die Eingabewerte einer POST/GET-Übermittlung übergibt?

Was ist der Sinn darin und warum ist es notwendig? (falls es so ist)

31voto

Jj. Punkte 3110

Es ist nicht notwendig, das Attribut .cleaned_data eines Formulars zu verwenden, bevor die Eingabewerte übergeben werden. Es wird einen AttributeError auslösen, wenn Sie es vor dem Aufruf von .is_valid() in einem gebundenen Formular tun oder wenn Sie versuchen, darauf in einem ungebundenen Formular zuzugreifen, Lesen Sie mehr über Form.cleaned_data .

Außerdem ist es in der Regel eine gute Idee, die Verwendung der Formulardaten in einer Form-Methode abstrakt zu halten, um die Logik zu kapseln

In Ihren Ansichten sollten Sie Formulare traditionell wie folgt verwenden:

if request.method == 'POST':
  form = MyForm(request.POST) # Übergeben Sie die POST/GET-Daten des Requests
  if form.is_valid():         # rufen Sie .is_valid auf
    form.process() # Sehen Sie, wie ich .cleaned_data nicht in der Ansicht aufrufe

In Ihrem Formular:

class MyForm(forms.Form):
  my_field = forms.CharField()

  def process(self):
    # Geht davon aus, dass .cleaned_data existiert, weil diese Methode immer nach .is_valid() aufgerufen wird, andernfalls wird ein AttributeError ausgelöst
    cd = self.cleaned_data 
    # Machen Sie etwas Interessantes mit Ihren Daten in cd
    # Zu diesem Zeitpunkt wurde .cleaned_data _nach_ dem Weitergeben der POST/GET-Daten als Formulardaten verwendet

4 Stimmen

+1 für die Erwähnung, dass Django eine AttributeError erheben wird, wenn du versuchst, auf cleaned_data zuzugreifen, bevor du is_valid() aufrufst. Wusstest du schon? Es passiert immer noch 6 Jahre später...

0 Stimmen

@pentix Ja. Glauben Sie, dass sie vielleicht einen FormNotValidated Fehler verwendet haben könnten?

0 Stimmen

Es sind immer noch 3 Jahre später

5voto

solartic Punkte 4049

Sobald is_valid() True zurückgibt, können Sie die Formularübermittlung verarbeiten und sicher sein, dass sie den Validierungsregeln entspricht, die von Ihrem Formular definiert wurden. Sie könnten zu diesem Zeitpunkt zwar direkt auf request.POST zugreifen, es ist jedoch besser, auf form.cleaned_data zuzugreifen. Diese Daten wurden nicht nur validiert, sondern auch in die relevanten Python-Typen für Sie umgewandelt.

Verarbeitung der Daten aus einem Formular

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X