Commit 3d05b2c109e28ce6a41a8066d06eb21d5257d4f5
1 parent
de5f9a51
Exists in
master
and in
3 other branches
Adding image validation
Showing
2 changed files
with
23 additions
and
6 deletions
Show diff stats
users/forms.py
| ... | ... | @@ -5,6 +5,18 @@ from rolepermissions.shortcuts import assign_role |
| 5 | 5 | from .models import User |
| 6 | 6 | |
| 7 | 7 | class Validation(forms.ModelForm): |
| 8 | + MIN_PASS_LENGTH = 8 | |
| 9 | + MAX_UPLOAD_SIZE = 2*1024*1024 | |
| 10 | + | |
| 11 | + def clean_image(self): | |
| 12 | + image = self.cleaned_data.get('image', False) | |
| 13 | + | |
| 14 | + if image: | |
| 15 | + if image._size > self.MAX_UPLOAD_SIZE: | |
| 16 | + raise forms.ValidationError(_("The image is too large. It should have less than 2MB.")) | |
| 17 | + | |
| 18 | + return image | |
| 19 | + | |
| 8 | 20 | def clean_password(self): |
| 9 | 21 | password = self.cleaned_data.get('password') |
| 10 | 22 | |
| ... | ... | @@ -12,8 +24,8 @@ class Validation(forms.ModelForm): |
| 12 | 24 | return password |
| 13 | 25 | |
| 14 | 26 | # At least MIN_LENGTH long |
| 15 | - if len(password) < self.MIN_LENGTH: | |
| 16 | - raise forms.ValidationError(_("The password must contain at least % d characters." % self.MIN_LENGTH)) | |
| 27 | + if len(password) < self.MIN_PASS_LENGTH: | |
| 28 | + raise forms.ValidationError(_("The password must contain at least % d characters." % self.MIN_PASS_LENGTH)) | |
| 17 | 29 | |
| 18 | 30 | # At least one letter and one non-letter |
| 19 | 31 | first_isalpha = password[0].isalpha() |
| ... | ... | @@ -38,7 +50,6 @@ class RegisterUserForm(Validation): |
| 38 | 50 | password = forms.CharField(label=_('Password'), widget = forms.PasswordInput) |
| 39 | 51 | password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput) |
| 40 | 52 | |
| 41 | - MIN_LENGTH = 8 | |
| 42 | 53 | is_edit = False |
| 43 | 54 | |
| 44 | 55 | def save(self, commit=True): |
| ... | ... | @@ -58,7 +69,6 @@ class ProfileForm(Validation): |
| 58 | 69 | password = forms.CharField(label=_('Password'), widget = forms.PasswordInput, required = False) |
| 59 | 70 | password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput, required = False) |
| 60 | 71 | |
| 61 | - MIN_LENGTH = 8 | |
| 62 | 72 | is_edit = True |
| 63 | 73 | |
| 64 | 74 | def save(self, commit=True): | ... | ... |
users/models.py
| ... | ... | @@ -2,16 +2,23 @@ import re |
| 2 | 2 | |
| 3 | 3 | from django.db import models |
| 4 | 4 | from django.core import validators |
| 5 | +from django.core.exceptions import ValidationError | |
| 5 | 6 | from django.utils.translation import ugettext_lazy as _ |
| 6 | 7 | from django.contrib.auth.models import AbstractBaseUser, UserManager, PermissionsMixin |
| 7 | 8 | from django.contrib.staticfiles.templatetags.staticfiles import static |
| 8 | 9 | |
| 10 | +def validate_img_extension(value): | |
| 11 | + valid_formats = ['image/jpeg','image/x-citrix-jpeg','image/png','image/x-citrix-png','image/x-png'] | |
| 12 | + | |
| 13 | + if not value.file.content_type in valid_formats: | |
| 14 | + raise ValidationError(_('File not supported.')) | |
| 15 | + | |
| 9 | 16 | class User(AbstractBaseUser, PermissionsMixin): |
| 10 | 17 | |
| 11 | 18 | email = models.EmailField(_('Mail'), unique = True, validators = [ |
| 12 | 19 | validators.RegexValidator( |
| 13 | 20 | re.compile('^[\w.@+-]+$'), |
| 14 | - _('Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .') | |
| 21 | + _('Type a valid email. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .') | |
| 15 | 22 | , 'invalid' |
| 16 | 23 | ) |
| 17 | 24 | ], help_text = _('Your email address that will be used to access the platform')) |
| ... | ... | @@ -19,7 +26,7 @@ class User(AbstractBaseUser, PermissionsMixin): |
| 19 | 26 | last_name = models.CharField(_('Last Name'), max_length = 100) |
| 20 | 27 | social_name = models.CharField(_('Social Name'), max_length = 100, blank = True, null = True) |
| 21 | 28 | description = models.TextField(_('Description'), blank = True) |
| 22 | - image = models.ImageField(verbose_name = _('Photo'), null=True, blank = True, upload_to = 'users/') | |
| 29 | + image = models.ImageField(verbose_name = _('Photo'), null=True, blank = True, upload_to = 'users/', validators = [validate_img_extension]) | |
| 23 | 30 | date_created = models.DateTimeField(_('Create Date'), auto_now_add = True) |
| 24 | 31 | last_update = models.DateTimeField(_('Last Update'), auto_now = True) |
| 25 | 32 | show_email = models.IntegerField(_('Show email?'), null = True, blank = True, choices = ((1, _('Allow everyone to see my address')), (2, _('Only classmates can see my address')), (3, _('Nobody can see my address')))) | ... | ... |