/ Published in: Python
Inspired by the linked code.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
import os from django import forms from django.conf import settings class ValidatedFileField(forms.FileField): def __init__(self, file_extensions, content_types, max_file_size=None, *args, **kwargs): super(ValidatedFileField, self).__init__(*args, **kwargs) self.file_extensions = [f.lower().replace('.', '') for f in file_extensions] self.content_types = content_types self.max_file_size = max_file_size def clean(self, data, initial=None): from django.template.defaultfilters import filesizeformat if not data and initial: return initial f = super(ValidatedFileField, self).clean(data) if not f: return f if self.max_file_size and self.max_file_size < f.size: raise forms.ValidationError('Files cannot exceed %s in size' % filesizeformat(self.max_file_size)) # not allowing files without an extension, really a preference thing if not f.name or f.name.find('.') == -1: raise forms.ValidationError('Does not appear to be a valid file') extension = os.path.splitext(f.name)[-1].lower().replace('.', '') if not extension in self.file_extensions or \ not f.content_type in self.content_types: raise forms.ValidationError('Accepted file types: %s' %\ ' '.join(self.file_extensions)) return super(ValidatedFileField, self).clean(data)
URL: http://www.neverfriday.com/sweetfriday/2008/03/validating-file-uploads-with-d.html