views.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: views.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-06-17 13:25:39 (CST)
  9. # Last Update:星期六 2016-7-30 12:23:21 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import jsonify
  14. from flask_maple import Auth
  15. from flask_login import login_required, current_user
  16. from flask_babelex import gettext as _
  17. from maple import app, mail, db, redis_data
  18. from maple.user.models import User, UserInfor, UserSetting, Role
  19. from maple.main.models import set_email_send
  20. from datetime import datetime, timedelta
  21. def check_time(func):
  22. def wrapper(*args, **kw):
  23. time = redis_data.hget('user:%s' % str(current_user.id),
  24. 'send_email_time')
  25. if time:
  26. try:
  27. time = time.split('.')[0]
  28. time = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
  29. if datetime.now() < time + timedelta(seconds=360):
  30. return jsonify(judge=False, error="你获取的验证链接还未过期,请尽快验证")
  31. except TypeError:
  32. set_email_send(current_user.id)
  33. except ValueError:
  34. set_email_send(current_user.id)
  35. else:
  36. set_email_send(current_user.id)
  37. return func(*args, **kw)
  38. return wrapper
  39. class Login(Auth):
  40. def register_models(self, form):
  41. user = self.User()
  42. user.username = form.username.data
  43. user.password = user.set_password(form.password.data)
  44. user.email = form.email.data
  45. userinfor = UserInfor()
  46. user.infor = userinfor
  47. usersetting = UserSetting()
  48. user.setting = usersetting
  49. role = Role.query.filter_by(name='unconfirmed').first()
  50. if role is None:
  51. role = Role()
  52. role.name = 'unconfirmed'
  53. user.roles.append(role)
  54. self.db.session.add(user)
  55. self.db.session.commit()
  56. return user
  57. @login_required
  58. @check_time
  59. def confirm_email(self):
  60. if current_user.is_confirmed:
  61. return jsonify(
  62. judge=False,
  63. error=_('Your account has been confirmed,don\'t need again'))
  64. else:
  65. self.register_email(current_user.email)
  66. set_email_send(current_user.id)
  67. return jsonify(
  68. judge=True,
  69. error=_('An email has been sent to your.Please receive'))
  70. def confirm_models(self, user):
  71. user.is_confirmed = True
  72. self.db.session.commit()
  73. auth = Login(app, db=db, mail=mail, user_model=User, use_principal=True)