forms.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from django import forms
  2. from captcha.fields import CaptchaField
  3. from .models import Organizer, CheckIn
  4. from _datetime import date
  5. import re
  6. class RegForm (forms.Form):
  7. updateFlag = forms.CharField(required=False, widget=forms.HiddenInput())
  8. originalMobile = forms.IntegerField(required=False, widget=forms.HiddenInput())
  9. username = forms.CharField(max_length=14, min_length=4, required=True, label='用户名(请输入字母数字及下划线,至少四位)*',
  10. error_messages={'required': '登录名不能为空。'}, widget=forms.TextInput(attrs={'style': 'width:100%'}))
  11. nickname = forms.CharField(max_length=14, min_length=2, required=True, label='昵称*',
  12. error_messages={'required': '昵称不能为空。'}, widget=forms.TextInput(attrs={'style': 'width:100%'}))
  13. email = forms.EmailField(label='电子邮件*', error_messages={'invalid': '请输入正确的邮件地址。'}, widget=forms.EmailInput(attrs={'style': 'width:100%'}))
  14. mobile = forms.IntegerField(min_value=13000000000, max_value=18999999999, required=True, label='手机号码*',
  15. error_messages={'required': '手机号码不能为空。'}, widget=forms.NumberInput(attrs={'style': 'width:100%'}))
  16. psw1 = forms.CharField(min_length=6, max_length=12, required=True, label='请输入密码(6-12位)*',
  17. error_messages={'required': '密码不能为空。', 'invalid': '密码长度不够。'}, widget=forms.PasswordInput(attrs={'style': 'width:100%'}))
  18. psw2 = forms.CharField(min_length=6, max_length=12, required=True, label='再次输入你的密码*', widget=forms.PasswordInput(attrs={'style': 'width:100%'}))
  19. captcha = CaptchaField(label='验证码*')
  20. def clean(self):
  21. cleaned_data = self.cleaned_data
  22. if cleaned_data['updateFlag'] != 'update': # 如果更新用户数据updateFlag的值为update
  23. if not re.match('[A-Za-z0-9_]+', cleaned_data['username']):
  24. raise forms.ValidationError(u'请输入字母数字及下划线,至少四位')
  25. if (cleaned_data['updateFlag'] == 'update' and cleaned_data['psw1'] == ''): # 如果更新用户数据username是disabled,不会post上来
  26. pass
  27. else:
  28. if len(cleaned_data['psw1']) < 6:
  29. raise forms.ValidationError(u'密码长度至少6位。')
  30. if cleaned_data['psw1'] != cleaned_data['psw2']:
  31. raise forms.ValidationError(u'两次输入的密码不一致。')
  32. try:
  33. captcha = cleaned_data['captcha']
  34. except Exception as e:
  35. print(e)
  36. raise forms.ValidationError(u'验证码错误')
  37. organizer = Organizer()
  38. if cleaned_data['updateFlag'] == 'update': # 如果更新用户数据updateFlag的值为update
  39. pass
  40. else:
  41. organizer.username = cleaned_data['username']
  42. if Organizer.sameUsername(organizer):
  43. raise forms.ValidationError(u'这个用户名已经注册过了,请换一个。')
  44. if cleaned_data['updateFlag'] == 'update' and cleaned_data['mobile'] == cleaned_data['originalMobile']: # 如果更新用户数据updateFlag的值为update
  45. pass
  46. else:
  47. organizer.mobile = cleaned_data['mobile']
  48. if Organizer.sameMobile(organizer):
  49. raise forms.ValidationError(u'这个手机号码已经注册过了,请换一个。')
  50. del organizer
  51. return cleaned_data # 注意此处一定要return clean_data,否则会报错
  52. class CheckInForm(forms.Form):
  53. # o_ID = forms.CharField(widget=forms.HiddenInput())
  54. description = forms.CharField(max_length=256, label='问卷标题', widget=forms.TextInput(attrs={'style': 'width:100%', 'class': 'form-control'}))
  55. startTime = forms.DateField(label='问卷收集开始时间',
  56. widget=forms.DateTimeInput(attrs={'style': 'width:100%', 'id': 'datepicker', 'class': 'form-control', 'type': 'date', 'value': date.today().isoformat()}))
  57. endTime = forms.DateField(required=False, label='问卷收集结束时间(如果不设定结束时间,请不要输入)',
  58. widget=forms.DateTimeInput(attrs={'style': 'width:100%', 'id': 'datepicker2', 'class': 'form-control', 'type': 'date'}))
  59. maxNum = forms.IntegerField(label='问卷收集限制人数(如无限制,无需输入)', required=False, min_value=1, widget=forms.NumberInput(attrs={'style': 'width:100%', 'class': 'form-control'}))
  60. # creatorConfirm = forms.ChoiceField(label='问卷收集是否需要组织者当场确认?', choices=[('0', '无需验证'), ('1', '点击确认')], required=False, widget=forms.Select(attrs={'style': 'width:100%', 'class': 'form-control'}))
  61. # captcha = forms.BooleanField(label='反馈提交时,是否需要输入验证码?', required=False,
  62. # widget=forms.CheckboxInput(attrs={'data-toggle': "tooltip", 'title': "参与者输入验证码可以确保签到有效性。"}))
  63. def clean(self):
  64. cleaned_data = self.cleaned_data
  65. if cleaned_data['endTime']:
  66. timeDelta = cleaned_data['endTime'] - cleaned_data['startTime']
  67. if timeDelta.days < 0:
  68. raise forms.ValidationError(u'结束时间不能早于开始时间。')
  69. return cleaned_data # 注意此处一定要return clean_data,否则会报错
  70. class CaptchaForm(forms.Form):
  71. myCaptcha = CaptchaField(label='验证码')
  72. def clean(self):
  73. cleaned_data = self.cleaned_data
  74. try:
  75. captcha = cleaned_data['myCaptcha']
  76. except Exception as e:
  77. print(e)
  78. raise forms.ValidationError(u'验证码错误')
  79. return cleaned_data # 注意此处一定要return clean_data,否则会报错
  80. class ForgetPSWForm(forms.Form):
  81. username = forms.CharField(max_length=14, min_length=2, required=True, label='用户名',
  82. error_messages={'required': '登录名不能为空。'}, widget=forms.TextInput(attrs={'style': 'width:100%'}))
  83. mobile = forms.IntegerField(min_value=13000000000, max_value=18999999999, required=True, label='手机号码',
  84. error_messages={'required': '手机号码不能为空。'}, widget=forms.NumberInput(attrs={'style': 'width:100%'}))
  85. captcha = CaptchaField(label='验证码', widget=forms.TextInput(attrs={'style':'width:100%'}))
  86. def clean(self):
  87. cleaned_data = self.cleaned_data
  88. try:
  89. captcha = cleaned_data['captcha']
  90. except Exception as e:
  91. print(e)
  92. raise forms.ValidationError(u'验证码错误')
  93. return cleaned_data # 注意此处一定要return clean_data,否则会报错