views.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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-7-28 11:35:19 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (request, current_app, flash, redirect, url_for,
  14. render_template)
  15. from flask.views import MethodView
  16. from flask_login import login_required, current_user
  17. from forums.permission import confirm_permission
  18. from forums.extension import cache
  19. def cache_key():
  20. if current_user.is_authenticated:
  21. return 'view:{}:{}'.format(current_user.id, request.url)
  22. return 'view:{}'.format(request.url)
  23. def is_confirmed(func):
  24. def _is_confirmed(*args, **kwargs):
  25. if confirm_permission.can():
  26. ret = func(*args, **kwargs)
  27. return ret
  28. flash('请验证你的帐号', 'warning')
  29. return redirect(url_for('user.user', username=current_user.username))
  30. return _is_confirmed
  31. class BaseMethodView(MethodView):
  32. @property
  33. def page_info(self):
  34. page = request.args.get('page', 1, type=int)
  35. if hasattr(self, 'per_page'):
  36. per_page = getattr(self, 'per_page')
  37. else:
  38. per_page = current_app.config.setdefault('PER_PAGE', 20)
  39. number = request.args.get('number', per_page, type=int)
  40. if number > 100:
  41. number = per_page
  42. return page, number
  43. @cache.cached(timeout=180, key_prefix=cache_key)
  44. def dispatch_request(self, *args, **kwargs):
  45. return super(BaseMethodView, self).dispatch_request(*args, **kwargs)
  46. def render_template(self, template, **kwargs):
  47. return render_template(template, **kwargs)
  48. class IsAuthMethodView(BaseMethodView):
  49. decorators = [login_required]
  50. class IsConfirmedMethodView(BaseMethodView):
  51. decorators = [is_confirmed, login_required]