user.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. from flask_wtf import Form
  13. from wtforms import PasswordField, TextField
  14. from wtforms import validators, ValidationError
  15. from wtforms.validators import Regexp
  16. from walle.model.user import RoleModel
  17. from walle.model.user import UserModel
  18. from flask import current_app
  19. import re
  20. from werkzeug.security import generate_password_hash
  21. class UserForm(FlaskForm):
  22. email = TextField('Email Address', [validators.email()])
  23. password = PasswordField('Password', [validators.Length(min=6, max=35),
  24. validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{6,}",
  25. message='密码至少6个字符,至少1个大写字母,1个小写字母,1个数字')])
  26. username = TextField('Username', [validators.Length(min=1, max=50)])
  27. role = TextField('role', [])
  28. def validate_email(self, field):
  29. if UserModel.query.filter_by(email=field.data).first():
  30. raise ValidationError('Email already register')
  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. }
  38. class RegistrationForm(UserForm):
  39. pass
  40. class UserUpdateForm(Form):
  41. password = PasswordField('Password', [])
  42. username = TextField('username', [validators.Length(min=1, max=50)])
  43. def validate_password(self, field):
  44. if field.data and not re.match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{6,}", field.data):
  45. raise ValidationError('密码至少6个字符,至少1个大写字母,1个小写字母,1个数字')
  46. class LoginForm(Form):
  47. email = TextField('Email Address', [validators.Length(min=6, max=35),
  48. Regexp(r'^(.+)@(.+)\.(.+)', message='邮箱格式不正确')])
  49. password = PasswordField('Password', [validators.Length(min=6, max=35)])