user.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-03-19 15:50:07
  6. :author: wushuiyong@walle-web.io
  7. """
  8. try:
  9. from flask_wtf import FlaskForm # Try Flask-WTF v0.13+
  10. except ImportError:
  11. from flask_wtf import Form as FlaskForm # Fallback to Flask-WTF v0.12 or older
  12. import re
  13. from walle.model.user import UserModel
  14. from werkzeug.security import generate_password_hash
  15. from wtforms import PasswordField, StringField
  16. from wtforms import validators, ValidationError
  17. from wtforms.validators import Regexp
  18. from datetime import datetime
  19. validator_regx_password = "^.*(?=.*[a-z])(?=.*[A-Z])(?=.*\d){6,}"
  20. class UserForm(FlaskForm):
  21. email = StringField('email', [validators.email()])
  22. password = PasswordField('Password', [])
  23. username = StringField('Username', [validators.Length(min=1, max=50)])
  24. role = StringField('role', [])
  25. def validate_email(self, field):
  26. if UserModel.query.filter_by(email=field.data).first():
  27. raise ValidationError('Email already register')
  28. def validate_password(self, field):
  29. if field.data and not re.match(validator_regx_password, field.data):
  30. raise ValidationError('密码至少6个字符,至少1个大写字母,1个小写字母,1个数字')
  31. def form2dict(self):
  32. return {
  33. 'username': self.username.data,
  34. 'password': generate_password_hash(self.password.data),
  35. 'email': self.email.data,
  36. 'role': self.role.data if self.role.data else '',
  37. 'created_at': datetime.now(),
  38. 'updated_at': datetime.now(),
  39. }
  40. class RegistrationForm(UserForm):
  41. pass
  42. class UserUpdateForm(FlaskForm):
  43. username = StringField('username', [])
  44. password = PasswordField('Password', [])
  45. def validate_password(self, field):
  46. if field.data and not re.match(validator_regx_password, field.data):
  47. raise ValidationError('密码至少6个字符,至少1个大写字母,1个小写字母,1个数字')
  48. class LoginForm(FlaskForm):
  49. email = StringField('email', [validators.Length(min=6, max=35),
  50. Regexp(r'^(.+)@(.+)\.(.+)', message='邮箱格式不正确')])
  51. password = PasswordField('Password', [validators.Length(min=6, max=35)])