from flask_wtf import FlaskForm from wtforms import TextAreaField, MultipleFileField, StringField, SubmitField from wtforms.validators import Optional, Length class PostForm(FlaskForm): nickname = StringField('Pseudo', validators=[Optional(), Length(max=50)]) content = TextAreaField('Message', validators=[Optional(), Length(max=2000)]) files = MultipleFileField('Fichiers', validators=[Optional()]) honeypot = StringField('Site Web', validators=[Optional()]) # Anti-spam field submit = SubmitField('Envoyer') def validate(self, extra_validators=None): initial_validation = super(PostForm, self).validate(extra_validators) if not initial_validation: return False # Custom validation: Must have either content or files if not self.content.data and not self.files.data: # Check if files list is empty or contains empty file has_files = False if self.files.data: for f in self.files.data: if f.filename: has_files = True break if not has_files and not self.content.data: self.content.errors.append('Vous devez fournir un message ou un fichier.') return False # Honeypot check if self.honeypot.data: return False return True