""" Formulaires publics de l'application LOGIS. """ from django import forms from django.utils.translation import gettext_lazy as _ class ContactForm(forms.Form): """Formulaire de demande de renseignements sur un bien immobilier. Protégé par : - token CSRF Django (automatique) - champ honeypot invisible (doit rester vide) - limitation de débit côté session (5 minutes entre deux envois) """ name = forms.CharField( max_length=200, label=_('Nom complet'), widget=forms.TextInput(attrs={ 'placeholder': _('Votre nom et prénom'), 'autocomplete': 'name', }), ) email = forms.EmailField( label=_('Adresse email'), widget=forms.EmailInput(attrs={ 'placeholder': _('votre@email.com'), 'autocomplete': 'email', }), ) phone = forms.CharField( max_length=30, required=False, label=_('Téléphone'), widget=forms.TextInput(attrs={ 'placeholder': _('+33 6 XX XX XX XX'), 'autocomplete': 'tel', }), ) message = forms.CharField( label=_('Message'), widget=forms.Textarea(attrs={ 'placeholder': _('Votre message, vos questions…'), 'rows': 5, }), ) property_id = forms.IntegerField( widget=forms.HiddenInput(), required=False, ) # Champ honeypot — doit rester vide ; les robots le remplissent website = forms.CharField( required=False, label='', widget=forms.TextInput(attrs={ 'style': 'position:absolute;left:-9999px;top:-9999px;', 'tabindex': '-1', 'autocomplete': 'off', 'aria-hidden': 'true', }), ) def clean_name(self): name = self.cleaned_data.get('name', '').strip() if len(name) < 2: raise forms.ValidationError(_('Veuillez indiquer votre nom complet.')) return name def clean_message(self): msg = self.cleaned_data.get('message', '').strip() if len(msg) < 10: raise forms.ValidationError(_('Votre message est trop court.')) return msg