Beste Weg, damit umzugehen request-Variablen in Django
Ich habe ein Formular 'in the wild', der nimmt viele verschiedene Variablen, die möglicherweise oder möglicherweise nicht aufgefüllt werden.
try:
app_version = request.REQUEST["appVersion"]
except:
app_version = ''
try:
app_name = request.REQUEST["appName"]
except:
app_name = ''
try:
app_code_name = request.REQUEST["appCodeName"]
except:
app_code_name = ''
Ist es ein enger Weg, dies zu erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn diese Variablen bestimmt sind, zu füllen ein Formular aus, dann können Sie sicher passieren die
request.POST
Objekt direkt in das Formular-Konstruktor.Wird das Formular automatisch an die richtigen Werte an den richtigen Formularfeldern
und verwenden Sie die Standardwerte für Schlüssel, die nicht existierenund wird immer noch leere Felder für fehlende Schlüssel (siehe Anhang).Wenn Sie versuchen, ein Formular, noch besser ist es, ein form Objekt erstellen wie oben, und Lesen Sie die Werte, die das Objekt.
Erinnern, Validierungs-code wird am besten platziert in der Formular-Klasse sowie. So, wenn
form.is_valid()
zurückTrue
, dann wissen Sie, Sie haben einen sauberen Datenbestand zu arbeiten.Hinweis: Django-docs empfehlen
request.POST
oderrequest.GET
direkt, anstatt die amalgamated variablerequest.REQUEST
, wie es ist expliziter.Nachtrag:
Ist es wichtig zu verstehen den Unterschied zwischen gebundenen und ungebundenen Formen in diesem Fall. Wenn Sie erstellen Sie ein ungebundenes Formular mit
form = MyForm()
dann, wenn die form instanziiert ist, wird es füllen Sie alle Felder mit deninitial
- Eigenschaft für jedes Feld (falls vorhanden). Zum Beispiel mit diesem code:form wird initialisiert mit appVersion mit einem Wert von '1.0'. Allerdings, wenn Sie binden Sie eine POST-Anforderung an eine form wie diese:
form = MyForm(request.POST)
, dann sind die ersten Eigenschaften werden ignoriert. Das heißt, wenn die POST dict wird nicht mit einem appVersion-Taste, dann wird das Feld leer gelassen werden. Solange das Feld ist nicht erforderlich, das Formular wird trotzdem überprüfen, und ändern Sieform.appVersion
in die Ansicht nach der Validierung.get(key, default)
ist eine Methode implementiert, die auf Pythondicts
. Wenn der Schlüssel im Wörterbuch vorhanden ist, wird dessen Wert zurückgegeben wird; wenn der Schlüssel nicht vorhanden ist, wird der angegebene Standardwert zurückgegeben. In Django, derrequest
Objekte Wörterbuch-ähnlichen Objekte, soget
ist auch definiert in der gleichen Weise.Wenn Sie viele Felder, eine kompaktere version könnte sein: