75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""
|
|
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
|