python - Extending a form field to add new validations -
i've written app uses forms collect information sent in email. many of these forms have filefield used attach files email. i'd validate 2 things, size of file (to ensure emails accepted our mail server. i'd check file extension, discourage attaching file types not useable our users.
(this python class i'm trying extend)
class filefield(field): widget = fileinput default_error_messages = { 'invalid': _(u"no file submitted. check encoding type on form."), 'missing': _(u"no file submitted."), 'empty': _(u"the submitted file empty."), 'max_length': _(u'ensure filename has @ %(max)d characters (it has %(length)d).'), } def __init__(self, *args, **kwargs): self.max_length = kwargs.pop('max_length', none) super(filefield, self).__init__(*args, **kwargs) def clean(self, data, initial=none): super(filefield, self).clean(initial or data) if not self.required , data in empty_values: return none elif not data , initial: return initial # uploadedfile objects should have name , size attributes. try: file_name = data.name file_size = data.size except attributeerror: raise validationerror(self.error_messages['invalid']) if self.max_length not none , len(file_name) > self.max_length: error_values = {'max': self.max_length, 'length': len(file_name)} raise validationerror(self.error_messages['max_length'] % error_values) if not file_name: raise validationerror(self.error_messages['invalid']) if not file_size: raise validationerror(self.error_messages['empty']) return data
just overload "clean" method:
def clean(self, data, initial=none): try: if data.size > somesize: raise validationerror('file big') (junk, ext) = os.path.splitext(data.name) if not ext in ('.jpg', '.gif', '.png'): raise validationerror('invalid file type') except attributeerror: raise validationerror(self.error_messages['invalid']) return filefield.clean(self, data, initial)
Comments
Post a Comment