Formulaire de contact maison
Bonsoir,
Je me suis fait un petit formulaire de contact. Sans tuto donc je ne sais pas si ce que j'ai fait c'est sécure... lol
Est-ce qu'il vaut mieux rajouter un captcha selon vous ?
Merci
def contact_view(request):
if request.method == "POST":
email = request.POST.get("email")
subject = request.POST.get("subject")
message = request.POST.get("message")
send_mail(subject=subject,
message=f"Message de {email} \n{message}",
from_email=None,
recipient_list=["[email protected]"])
# recipient_list : penser à passer une liste !
# from_email None (va chercher dans les settings)
return redirect('ideas:contact-ok')
# auth verify
if request.user.is_authenticated:
form = ContactForm(initial=model_to_dict(request.user, exclude="password"))
else:
form = ContactForm()
return render(request, "ideas/contact.html", context={"form": form})
Salut !
Il est sympa ton formulaire de contact ! 🤘 Concernant la sécurité, il y a toujours des choses à améliorer, mais voici déjà quelques conseils.
Rajouter un captcha est une bonne idée pour éviter les robots et les attaques de type spam. Le plus couramment utilisé est le Google reCAPTCHA, tu peux le mettre en place assez facilement en suivant leur documentation ici.
Dans ton code, je vois pas de validation des données entrées par l'utilisateur. Tu peux ajouter un nettoyage des champs de formulaire. Par exemple, en utilisant des méthodes comme clean_ dans ton formulaire ContactForm. cf. la doc: https://docs.djangoproject.com/en/4.2/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other
J'aimagine que tu l'as déjà mais assure-toi que ton site est protégé contre les attaques CSRF en ajoutant {% csrf_token %} dans ton fichier HTML de formulaire.
OK, je n'ai pas eu le choix de passer par une validation du formulaire. Et tant qu'à faire autant utiliser la validation ^^
def contact_view(request):
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
email = form.cleaned_data["email"]
subject = form.cleaned_data["subject"]
message = form.cleaned_data["message"]
send_mail(subject=subject,
message=f"Message de {email} \n{message}",
from_email=None,
recipient_list=["[email protected]"])
# recipient_list : penser à passer une liste !
# from_email None (va chercher dans les settings)
return redirect('ideas:contact-ok')
# auth verify
if request.user.is_authenticated:
form = ContactForm(initial=model_to_dict(request.user, exclude="password"))
else:
form = ContactForm()
return render(request, "ideas/contact.html", context={"form": form})
class ContactForm(forms.Form):
email = forms.EmailField(label="Email")
subject = forms.CharField(max_length=100, label="Objet", help_text="100 caractères max")
message = forms.CharField(label="Message", max_length=5000, help_text="5000 caractères max", widget=forms.Textarea)
captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox)
Merci PA !
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte