views.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: views.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-03-13 13:29:37 (CST)
  9. # Last Update:星期六 2017-4-1 22:15:52 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import request, current_app, flash, redirect, url_for
  14. from flask.views import MethodView
  15. from flask_login import login_required, current_user
  16. from forums.permission import confirm_permission
  17. from forums.extension import cache
  18. def cache_key():
  19. key = request.url
  20. return 'view:%s' % key
  21. def is_confirmed(func):
  22. def _is_confirmed(*args, **kwargs):
  23. if confirm_permission.can():
  24. ret = func(*args, **kwargs)
  25. return ret
  26. flash('请验证你的帐号', 'warning')
  27. return redirect(url_for('user.user', username=current_user.username))
  28. return _is_confirmed
  29. class BaseMethodView(MethodView):
  30. @property
  31. def page_info(self):
  32. page = request.args.get('page', 1, type=int)
  33. if hasattr(self, 'per_page'):
  34. per_page = getattr(self, 'per_page')
  35. else:
  36. per_page = current_app.config.setdefault('PER_PAGE', 20)
  37. number = request.args.get('number', per_page, type=int)
  38. if number > 100:
  39. number = per_page
  40. return page, number
  41. @cache.cached(timeout=180, key_prefix=cache_key)
  42. def dispatch_request(self, *args, **kwargs):
  43. return super(BaseMethodView, self).dispatch_request(*args, **kwargs)
  44. class IsAuthMethodView(BaseMethodView):
  45. decorators = [login_required]
  46. class IsConfirmedMethodView(BaseMethodView):
  47. decorators = [is_confirmed, login_required]