Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django import forms
- from django.contrib.auth import authenticate
- from .models import User, VoterCardApplication, VoterCard, PoliticalParty, ConstituencyElectionCandidateDetail, ElectionMobileOTP, ElectionEmailOTP, UserRegistrationMobileOTP
- from datetime import datetime
- class UserRegistrationForm(forms.ModelForm):
- password1 = forms.CharField(widget=forms.PasswordInput(), min_length=6)
- password2 = forms.CharField(widget=forms.PasswordInput())
- class Meta:
- model = User
- fields = ['voter_id' ,'email', 'first_name', 'last_name', 'mobile_number', 'aadhar_number', 'security_question_1_answer', 'security_question_2_answer', 'security_question_3_answer']
- def __init__(self, *args, **kwargs):
- super(UserRegistrationForm, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_mobile_number(self):
- mobile_number = self.cleaned_data.get('mobile_number', '')
- if not mobile_number.isdigit():
- raise forms.ValidationError("Please enter a valid mobile number")
- if len(mobile_number) != 10:
- raise forms.ValidationError("Please enter a 10 digit mobile number")
- return mobile_number
- def clean_aadhar_number(self):
- aadhar_number = self.cleaned_data.get('aadhar_number', '')
- if not aadhar_number.isdigit():
- raise forms.ValidationError("Please enter a valid aadhar number")
- if len(aadhar_number) != 12:
- raise forms.ValidationError("Please enter a 12 digit aadhar number")
- return aadhar_number
- def clean_voter_id(self):
- voter_id = self.cleaned_data.get('voter_id', '')
- try:
- # search in voter database if any voter application with approved status and given voter id exists
- VoterCard.objects.get(voter_id=voter_id)
- except: # raise error if not found
- raise forms.ValidationError('This voter id does not exist in our records. Please enter a correct voter id')
- return voter_id
- def clean(self):
- """
- Verifies that the values entered into the password fields match
- """
- cleaned_data = super(UserRegistrationForm, self).clean()
- if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
- if self.cleaned_data['password1'] != self.cleaned_data['password2']:
- self._errors['password1'] = self.error_class(["Passwords do not match."])
- return self.cleaned_data
- def save(self, commit=True):
- user = super(UserRegistrationForm, self).save(commit=False)
- # save password in hashed format
- user.set_password(self.cleaned_data['password1'])
- if commit:
- user.save() # save to database
- return user
- class UserRegistrationStep3Form(forms.Form):
- mobile_otp = forms.CharField()
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user', None)
- super(UserRegistrationStep3Form, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:300px'})
- def clean_mobile_otp(self):
- mobile_otp = self.cleaned_data.get('mobile_otp', '')
- if not mobile_otp.isdigit():
- raise forms.ValidationError('Invalid OTP')
- otp_object = UserRegistrationMobileOTP.objects.filter(user=self.user).first()
- if not otp_object or mobile_otp != otp_object.otp_code:
- raise forms.ValidationError('Invalid OTP code')
- if not otp_object.is_otp_valid():
- raise forms.ValidationError('OTP has expired. Please try again.')
- return mobile_otp
- class UserLoginForm(forms.Form):
- """
- Login form
- """
- voter_id = forms.CharField(max_length=255, widget=forms.TextInput())
- password = forms.CharField(widget=forms.PasswordInput())
- def __init__(self, *args, **kwargs):
- super(UserLoginForm, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:300px'})
- def clean_voter_id(self):
- voter_id = self.cleaned_data['voter_id']
- if not User.objects.filter(voter_id=voter_id).exists():
- raise forms.ValidationError('This voter id is not registered with us.')
- return voter_id
- def clean(self):
- cleaned_data = super(UserLoginForm, self).clean()
- if not self._errors:
- self.user = authenticate(username=cleaned_data['voter_id'], password=cleaned_data['password'])
- if not self.user:
- self._errors['voter_id'] = self.error_class(['User ID and Password do not match'])
- return cleaned_data
- class VoterCardApplicationForm(forms.ModelForm):
- class Meta:
- model = VoterCardApplication
- exclude = ['created_on', 'application_status', 'voter_id', 'message']
- def __init__(self, *args, **kwargs):
- super(VoterCardApplicationForm, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_mobile_number(self):
- mobile_number = self.cleaned_data.get('mobile_number', '')
- if not mobile_number.isdigit():
- raise forms.ValidationError("Please enter a valid mobile number")
- if len(mobile_number) != 10:
- raise forms.ValidationError("Please enter a 10 digit mobile number")
- return mobile_number
- def clean_residence_pincode(self):
- residence_pincode = self.cleaned_data.get('residence_pincode', '')
- if not residence_pincode.isdigit():
- raise forms.ValidationError("Please enter a valid pincode")
- if len(residence_pincode) != 6:
- raise forms.ValidationError("Please enter a 6 digit pincode")
- return residence_pincode
- def clean(self):
- cleaned_data = super(VoterCardApplicationForm, self).clean()
- if not self._errors:
- # check valid date of birth
- year_of_birth = self.cleaned_data['year_of_birth']
- month_of_birth = self.cleaned_data['month_of_birth']
- day_of_birth = self.cleaned_data['day_of_birth']
- try:
- date_of_birth = datetime(year=year_of_birth, month=month_of_birth, day=day_of_birth)
- except:
- self._errors['year_of_birth'] = self.error_class(['Please enter a valid date of birth'])
- return cleaned_data
- class PoliticalPartyCreateForm(forms.ModelForm):
- class Meta:
- model = PoliticalParty
- fields = ['name', 'abbreviation', 'founded_by', 'party_logo', 'objectives']
- def __init__(self, *args, **kwargs):
- super(PoliticalPartyCreateForm, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_abbreviation(self):
- abbreviation = self.cleaned_data.get('abbreviation', '')
- return abbreviation.upper()
- class ConstituencyElectionCandidateNominationForm(forms.ModelForm):
- class Meta:
- model = ConstituencyElectionCandidateDetail
- fields = ['political_party', 'election_motto', 'election_objectives', 'candidate_election_picture']
- def __init__(self, *args, **kwargs):
- super(ConstituencyElectionCandidateNominationForm, self).__init__(*args, **kwargs)
- # only display approved political parties
- self.fields['political_party'].queryset = PoliticalParty.objects.filter(is_approved=True)
- self.fields['political_party'].empty_label = 'Independent'
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- class ConstituencyElectionVotingStep1Form(forms.Form):
- security_question_1_answer = forms.CharField(max_length=50)
- security_question_2_answer = forms.CharField(max_length=50)
- security_question_3_answer = forms.CharField(max_length=50)
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user', None)
- super(ConstituencyElectionVotingStep1Form, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_security_question_1_answer(self):
- security_question_1_answer = self.cleaned_data.get('security_question_1_answer', '')
- if security_question_1_answer != self.user.security_question_1_answer:
- raise forms.ValidationError('Incorrect answer')
- return security_question_1_answer
- def clean_security_question_2_answer(self):
- security_question_2_answer = self.cleaned_data.get('security_question_2_answer', '')
- if security_question_2_answer != self.user.security_question_2_answer:
- raise forms.ValidationError('Incorrect answer')
- return security_question_2_answer
- def clean_security_question_3_answer(self):
- security_question_3_answer = self.cleaned_data.get('security_question_3_answer', '')
- if security_question_3_answer != self.user.security_question_3_answer:
- raise forms.ValidationError('Incorrect answer')
- return security_question_3_answer
- class ConstituencyElectionVotingStep2Form(forms.Form):
- email_otp = forms.CharField()
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user', None)
- self.constituency_election = kwargs.pop('constituency_election', None)
- super(ConstituencyElectionVotingStep2Form, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_email_otp(self):
- email_otp = self.cleaned_data.get('email_otp', '')
- if not email_otp.isdigit():
- raise forms.ValidationError('Invalid OTP')
- otp_object = ElectionEmailOTP.objects.filter(constituency_election=self.constituency_election, user=self.user).first()
- if not otp_object or email_otp != otp_object.otp_code:
- raise forms.ValidationError('Invalid OTP code')
- if not otp_object.is_otp_valid():
- raise forms.ValidationError('OTP has expired. Please try again.')
- return email_otp
- class ConstituencyElectionVotingStep3Form(forms.Form):
- mobile_otp = forms.CharField()
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user', None)
- self.constituency_election = kwargs.pop('constituency_election', None)
- super(ConstituencyElectionVotingStep3Form, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_mobile_otp(self):
- mobile_otp = self.cleaned_data.get('mobile_otp', '')
- if not mobile_otp.isdigit():
- raise forms.ValidationError('Invalid OTP')
- otp_object = ElectionMobileOTP.objects.filter(constituency_election=self.constituency_election, user=self.user).first()
- if not otp_object or mobile_otp != otp_object.otp_code:
- raise forms.ValidationError('Invalid OTP code')
- if not otp_object.is_otp_valid():
- raise forms.ValidationError('OTP has expired. Please try again.')
- return mobile_otp
- class ConstituencyElectionVotingForm(forms.Form):
- constituency_election_candidate = forms.IntegerField()
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user', None)
- self.constituency_election = kwargs.pop('constituency_election', None)
- super(ConstituencyElectionVotingForm, self).__init__(*args, **kwargs)
- # set css class and properties
- for field in self.fields:
- self.fields[field].widget.attrs.update({'class':'form-control has-error', 'style':'width:400px'})
- def clean_constituency_election_candidate(self):
- constituency_election_candidate = self.cleaned_data.get('constituency_election_candidate', 0)
- if not self.constituency_election.constituency_election_candidates.filter(id=constituency_election_candidate, nomination_status=1):
- raise forms.ValidationError('Invalid candidate')
- return constituency_election_candidate
Add Comment
Please, Sign In to add comment