Registration Form error cant seem to locate

Viewed 24

I am using Django in Mac. Last week, the registration is good but now when I rerun it I encountered a problem and I cant seem to figure out where the problem lies. Hope someone can help me. Thank you

error: [19/Sep/2022 20:24:50] "POST /registerUser/ HTTP/1.1" 200 6995 /opt/homebrew/lib/python3.9/site-packages/PIL/Image.py:3011: DecompressionBombWarning: Image size (139513096 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack. warnings.warn( invalid form

<bound method BaseForm.non_field_errors of < UserForm bound=True, valid=True, fields=(first_name;middle_name;last_name;username;email;mobile_number;password;confirm_password)>>

Views

def registerUser(request):
    if request.user.is_authenticated:
        messages.warning(request, "You are already logged in!")
        return redirect ('myAccount')
    elif request.method == 'POST':
        form = UserForm(request.POST)
        m_form = MemberForm(request.POST, request.FILES)
        try:
            if form.is_valid() and m_form.is_valid():
                first_name = form.cleaned_data['first_name']
                middle_name = form.cleaned_data['middle_name']
                last_name = form.cleaned_data['last_name']
                username = form.cleaned_data['username']
                email = form.cleaned_data['email']
                mobile_number = form.cleaned_data['mobile_number']
                password = form.cleaned_data['password']
                user = User.objects.create_user(first_name=first_name, middle_name=middle_name, last_name=last_name, username=username, email=email, mobile_number=mobile_number, password=password)
                user.role = User.MEMBER
                user.save()
                member = m_form.save(commit=False)
                member.user = user
                member.save()
            
        
                # send verification email
                mail_subject = 'Please Activate Your Account'
                email_template = 'accounts/emails/account_verification_email.html'
                send_verfication_email(request, user, mail_subject, email_template)
                messages.success(request, 'You have signed up successfully! Please check your email to verify your account.')
                print(user.password)
                return redirect('signin')
        except Exception as e:
            print('invalid form')
            messages.error(request, str(e))

    else:
        form = UserForm()
        m_form = MemberForm()
    context = {
        'form' : form,
        'm_form' : m_form,
    }
    return render(request, 'accounts/register.html', context)

Model

 class UserManager(BaseUserManager):
    def create_user(self, first_name, middle_name, last_name, username, email, mobile_number, password=None):
        if not email:
            raise ValueError('User must have an email address')
    
        if not username:
            raise ValueError('User must have an username')
    
        if not mobile_number:
            raise ValueError('User must have a mobile number')
    
        user = self.model(
            email = self.normalize_email(email), #lowercase email
            username = username,
            first_name = first_name,
            middle_name = middle_name,
            last_name = last_name,
            mobile_number = mobile_number,
        )
        user.set_password(password)
        user.save(using=self.db) 
        return user

    def create_superuser(self, first_name, middle_name, last_name, username, email, mobile_number, password=None):
        user = self.create_user(
            email = self.normalize_email(email), #lowercase email
            username = username,
            password = password,
            first_name = first_name,
            middle_name = middle_name,
            last_name = last_name,
            mobile_number = mobile_number,
        )
        user.is_admin = True
        user.is_active = True
        user.is_staff = True
        user.is_superadmin = True
        user.save(using=self.db)
        return user
    

class User(AbstractBaseUser):
    MEMBER = 1
    ADMIN = 2
    SUPERADMIN = 3
    ROLE_CHOICE = (
        (MEMBER, 'Member'),
        (ADMIN, 'Admin'),
        (SUPERADMIN, 'Super Admin')
    )

    ACTIVE = 1
    DELETED = 2
    DEACTIVATED = 3

    STATUS = (
        (ACTIVE, 'Active'),
        (DELETED, 'Deleted'),
        (DEACTIVATED, 'Deactivated')
    )

    first_name = models.CharField(max_length=50)
    middle_name = models.CharField(max_length=50, default="Some String")
    last_name = models.CharField(max_length=50)
    username = models.CharField(max_length=50, unique=True)
    email = models.EmailField(max_length=100, unique=True)
    mobile_number = models.CharField(max_length = 100, db_index=True, null = True, validators=[
    
        RegexValidator(
            regex='^(\+\d{1,3})?,?\s?\d{8,13}',
            message='Phone number must not consist of space and requires country code. eg : +639171234567',
        ),
    ])
    password = models.CharField(max_length = 100,validators=[MinLengthValidator(8),
        
    ])
    role = models.PositiveSmallIntegerField(choices=ROLE_CHOICE, blank=True, null=True)
    status = models.PositiveSmallIntegerField(choices=STATUS, blank=True, null=True)

# required fields
    date_joined = models.DateTimeField(auto_now_add=True)
    last_login = models.DateTimeField(auto_now_add=True)
    created_date= models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now_add=True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)
    is_superadmin = models.BooleanField(default=False)

     USERNAME_FIELD = 'username'
     REQUIRED_FIELDS = ['email', 'first_name', 'middle_name', 'last_name', 'mobile_number']

     objects = UserManager()

    def __str__(self):
        return self.username

def has_perm(self, perm, obj=None):
    return self.is_admin

def has_module_perms(self, app_label):
    return True

    def get_role(self):
         if self.role == 1:
             user_role = 'Member'
         elif self.role == 2:
            user_role = 'Admin'
         elif self.role == 3:
             user_role = 'Super Admin'
         return user_role

    def get_status(self):
        if self.status == 1:
            user_status = 'Active'
        elif self.status == 2:
            user_status = 'Deleted'
        elif self.status == 3:
            user_status = 'Deactivated'
        return user_status

class userMember(models.Model):
     user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
     birthdate = models.DateField(blank=True, null=True)
     profile_picture = models.ImageField(upload_to='users/profile_pictures', blank=True, null=True)
     cover_color = ColorField(format='hexa', blank=True, null=True)
     upload_id = models.ImageField(upload_to='member/id')
     created_at = models.DateTimeField(auto_now=True)
     modified_at = models.DateTimeField(auto_now=True)

    def __str__(self):
         return self.user.username

 @receiver(post_save, sender=User)
 def create_user_profile(sender, instance, created, **kwargs):
     if created:
        userMember.objects.get_or_create(user=instance)

Form

class DateInput(forms.DateInput):
    input_type = 'date'


class UserForm(forms.ModelForm):
    first_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Jones', 'style': 'width: 150px; '}))
     middle_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'A', 'style': 'width: 150px; '}))
     last_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Smith', 'style': 'width: 150px; '}))
     mobile_number = forms.CharField(max_length=15, validators=[RegexValidator(
    '^\+[0-9]{1,3}\.?\s?\d{8,13}', message="Phone number must not consist of space and requires country code. eg : +639171234567")],widget=forms.TextInput(attrs={'placeholder': '09123456789', 'style': 'width: 305px; '}),
                                error_messages={'unique': ("Mobile Number already exists.")})

    email = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'jonesmith@gmail.com', 'style': 'width: 460px; '}),
                        error_messages={'unique': ("Email already exists.")},)
     username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Jones_Smith31', 'style': 'width: 460px; '}),
                           error_messages={'unique': ("Username already exists.")},)
     password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '********', 'style': 'width: 460px; '}))
#password = forms.CharField(validators=[MinLengthValidator(8),RegexValidator('^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z])$', message="Password should be a combination of Alphabets and Numbers")], widget=forms.PasswordInput(attrs={'placeholder': '********', 'style': 'width: 460px; '}))
    confirm_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '********', 'style': 'width: 460px;' }))
class Meta:
         model = User
         fields = ['first_name', 'middle_name', 'last_name', 'username', 'email', 'mobile_number', 'password']
    
    
    
    def clean(self):
         clean_data = super(UserForm, self).clean()
         password = clean_data.get('password')
         confirm_password = clean_data.get('confirm_password')
    
    
    
         if password != confirm_password:
             raise forms.ValidationError(
                 "Password and Confirm Password does not match!"
        )
    

 class MemberForm(forms.ModelForm):
     birthdate = forms.DateField(widget=DateInput(attrs={'class': 'form-control ', }))
     profile_picture = forms.FileField(widget=forms.FileInput(attrs={'class': 'btn btn-info'}))
    class Meta:
         model = userMember
         fields = ['birthdate', 'upload_id', 'profile_picture']
1 Answers

I think pil is protecting you against large files. You can disable it, if you want.

from PIL import Image

Image.MAX_IMAGE_PIXELS = None
Related