from django import forms from captcha.fields import CaptchaField from .models import Organizer, CheckIn from _datetime import date import re class RegForm (forms.Form): updateFlag = forms.CharField(required=False, widget=forms.HiddenInput()) originalMobile = forms.IntegerField(required=False, widget=forms.HiddenInput()) username = forms.CharField(max_length=14, min_length=4, required=True, label='用户名(请输入字母数字及下划线,至少四位)*', error_messages={'required': '登录名不能为空。'}, widget=forms.TextInput(attrs={'style': 'width:100%'})) nickname = forms.CharField(max_length=14, min_length=2, required=True, label='昵称*', error_messages={'required': '昵称不能为空。'}, widget=forms.TextInput(attrs={'style': 'width:100%'})) email = forms.EmailField(label='电子邮件*', error_messages={'invalid': '请输入正确的邮件地址。'}, widget=forms.EmailInput(attrs={'style': 'width:100%'})) mobile = forms.IntegerField(min_value=13000000000, max_value=18999999999, required=True, label='手机号码*', error_messages={'required': '手机号码不能为空。'}, widget=forms.NumberInput(attrs={'style': 'width:100%'})) psw1 = forms.CharField(min_length=6, max_length=12, required=True, label='请输入密码(6-12位)*', error_messages={'required': '密码不能为空。', 'invalid': '密码长度不够。'}, widget=forms.PasswordInput(attrs={'style': 'width:100%'})) psw2 = forms.CharField(min_length=6, max_length=12, required=True, label='再次输入你的密码*', widget=forms.PasswordInput(attrs={'style': 'width:100%'})) captcha = CaptchaField(label='验证码*') def clean(self): cleaned_data = self.cleaned_data if cleaned_data['updateFlag'] != 'update': # 如果更新用户数据updateFlag的值为update if not re.match('[A-Za-z0-9_]+', cleaned_data['username']): raise forms.ValidationError(u'请输入字母数字及下划线,至少四位') if (cleaned_data['updateFlag'] == 'update' and cleaned_data['psw1'] == ''): # 如果更新用户数据username是disabled,不会post上来 pass else: if len(cleaned_data['psw1']) < 6: raise forms.ValidationError(u'密码长度至少6位。') if cleaned_data['psw1'] != cleaned_data['psw2']: raise forms.ValidationError(u'两次输入的密码不一致。') try: captcha = cleaned_data['captcha'] except Exception as e: print(e) raise forms.ValidationError(u'验证码错误') organizer = Organizer() if cleaned_data['updateFlag'] == 'update': # 如果更新用户数据updateFlag的值为update pass else: organizer.username = cleaned_data['username'] if Organizer.sameUsername(organizer): raise forms.ValidationError(u'这个用户名已经注册过了,请换一个。') if cleaned_data['updateFlag'] == 'update' and cleaned_data['mobile'] == cleaned_data['originalMobile']: # 如果更新用户数据updateFlag的值为update pass else: organizer.mobile = cleaned_data['mobile'] if Organizer.sameMobile(organizer): raise forms.ValidationError(u'这个手机号码已经注册过了,请换一个。') del organizer return cleaned_data # 注意此处一定要return clean_data,否则会报错 class CheckInForm(forms.Form): # o_ID = forms.CharField(widget=forms.HiddenInput()) description = forms.CharField(max_length=256, label='问卷标题', widget=forms.TextInput(attrs={'style': 'width:100%', 'class': 'form-control'})) startTime = forms.DateField(label='问卷收集开始时间', widget=forms.DateTimeInput(attrs={'style': 'width:100%', 'id': 'datepicker', 'class': 'form-control', 'type': 'date', 'value': date.today().isoformat()})) endTime = forms.DateField(required=False, label='问卷收集结束时间(如果不设定结束时间,请不要输入)', widget=forms.DateTimeInput(attrs={'style': 'width:100%', 'id': 'datepicker2', 'class': 'form-control', 'type': 'date'})) maxNum = forms.IntegerField(label='问卷收集限制人数(如无限制,无需输入)', required=False, min_value=1, widget=forms.NumberInput(attrs={'style': 'width:100%', 'class': 'form-control'})) # creatorConfirm = forms.ChoiceField(label='问卷收集是否需要组织者当场确认?', choices=[('0', '无需验证'), ('1', '点击确认')], required=False, widget=forms.Select(attrs={'style': 'width:100%', 'class': 'form-control'})) # captcha = forms.BooleanField(label='反馈提交时,是否需要输入验证码?', required=False, # widget=forms.CheckboxInput(attrs={'data-toggle': "tooltip", 'title': "参与者输入验证码可以确保签到有效性。"})) def clean(self): cleaned_data = self.cleaned_data if cleaned_data['endTime']: timeDelta = cleaned_data['endTime'] - cleaned_data['startTime'] if timeDelta.days < 0: raise forms.ValidationError(u'结束时间不能早于开始时间。') return cleaned_data # 注意此处一定要return clean_data,否则会报错 class CaptchaForm(forms.Form): myCaptcha = CaptchaField(label='验证码') def clean(self): cleaned_data = self.cleaned_data try: captcha = cleaned_data['myCaptcha'] except Exception as e: print(e) raise forms.ValidationError(u'验证码错误') return cleaned_data # 注意此处一定要return clean_data,否则会报错 class ForgetPSWForm(forms.Form): username = forms.CharField(max_length=14, min_length=2, required=True, label='用户名', error_messages={'required': '登录名不能为空。'}, widget=forms.TextInput(attrs={'style': 'width:100%'})) mobile = forms.IntegerField(min_value=13000000000, max_value=18999999999, required=True, label='手机号码', error_messages={'required': '手机号码不能为空。'}, widget=forms.NumberInput(attrs={'style': 'width:100%'})) captcha = CaptchaField(label='验证码', widget=forms.TextInput(attrs={'style':'width:100%'})) def clean(self): cleaned_data = self.cleaned_data try: captcha = cleaned_data['captcha'] except Exception as e: print(e) raise forms.ValidationError(u'验证码错误') return cleaned_data # 注意此处一定要return clean_data,否则会报错