views.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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-25 20:44:44 (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. print(time)
  26. try:
  27. time = time.split('.')[0]
  28. time = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
  29. print(time)
  30. if datetime.now() < time + timedelta(seconds=360):
  31. return jsonify(judge=False, error="你获取的验证链接还未过期,请尽快验证")
  32. except TypeError:
  33. set_email_send(current_user.id)
  34. except ValueError:
  35. set_email_send(current_user.id)
  36. return func(*args, **kw)
  37. return wrapper
  38. class Login(Auth):
  39. def register_models(self, form):
  40. user = self.User()
  41. user.username = form.username.data
  42. user.password = user.set_password(form.password.data)
  43. user.email = form.email.data
  44. userinfor = UserInfor()
  45. user.infor = userinfor
  46. usersetting = UserSetting()
  47. user.setting = usersetting
  48. role = Role.query.filter_by(name='unconfirmed').first()
  49. if role is None:
  50. role = Role()
  51. role.name = 'unconfirmed'
  52. user.roles.append(role)
  53. self.db.session.add(user)
  54. self.db.session.commit()
  55. return user
  56. @login_required
  57. @check_time
  58. def confirm_email(self):
  59. if current_user.is_confirmed:
  60. return jsonify(
  61. judge=False,
  62. error=_('Your account has been confirmed,don\'t need again'))
  63. else:
  64. self.register_email(current_user.email)
  65. set_email_send(current_user.id)
  66. return jsonify(
  67. judge=True,
  68. error=_('An email has been sent to your.Please receive'))
  69. def confirm_models(self, user):
  70. user.is_confirmed = True
  71. self.db.session.commit()
  72. auth = Login(app, db=db, mail=mail, user_model=User, use_principal=True)