Si ces variables sont destinées à remplir un formulaire, vous pouvez transmettre l'objet request.POST
directement au constructeur du formulaire.
if request.method == 'POST':
form = MyForm(request.POST)
La forme passera automatiquement les valeurs correctes aux champs de formulaire correct
et utiliser les valeurs par défaut pour les clés qui n'existent pas
et va encore créer des champs vides pour les clés manquantes (voir supplément).
Si vous essayez de traiter un formulaire, il est toujours préférable de créer un objet de formulaire comme ci-dessus et de lire les valeurs de cet objet. N'oubliez pas que le code de validation est également mieux placé dans la classe de formulaire. De cette façon, si form.is_valid()
renvoie True
, vous savez que vous disposez d'un jeu de données propre à utiliser.
Remarque: Les documentations Django recommandent d'utiliser request.POST
ou request.GET
directement plutôt que la variable fusionnée request.REQUEST
, car elle est plus explicite.
Addendum:
Il est important de comprendre la différence entre les formes liées et non liées dans ce cas. Si vous créez un formulaire non lié avec form = MyForm()
, lorsque le formulaire est instancié, il remplira tous les champs avec la propriété initial
de chaque champ (s'il existe). Par exemple, avec ce code:
from django import forms
class MyForm(forms.Form):
appVersion = forms.CharField(initial='1.0')
appName = forms.CharField()
appCodeName = forms.CharField()
la forme sera initialisée avec appVersion ayant une valeur de '1.0'. Toutefois, si vous liez une requête POST à un formulaire comme celui-ci: form = MyForm(request.POST)
, les propriétés initiales sont ignorées. Cela signifie que si la commande POST n'inclut pas de clé appVersion, ce champ sera laissé vide. Tant que le champ n'est pas requis, votre formulaire sera toujours validé et vous pourrez modifier form.appVersion
dans la vue après validation.
et GET demande peut être validée automatiquement avec url regexes – Evgeny
Je n'étais pas au courant de cela, merci! – sixthgear
Bonne réponse. BTW, je vais utiliser réellement POST, pas de demande, je viens de passer en mode test et je trouve qu'il est plus facile d'envoyer des cas de test avec GET. –