views.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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-21 17:54:23 (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. return 'view:{}:{}'.format(request.remote_addr, request.url)
  20. def is_confirmed(func):
  21. def _is_confirmed(*args, **kwargs):
  22. if confirm_permission.can():
  23. ret = func(*args, **kwargs)
  24. return ret
  25. flash('请验证你的帐号', 'warning')
  26. return redirect(url_for('user.user', username=current_user.username))
  27. return _is_confirmed
  28. class BaseMethodView(MethodView):
  29. @property
  30. def page_info(self):
  31. page = request.args.get('page', 1, type=int)
  32. if hasattr(self, 'per_page'):
  33. per_page = getattr(self, 'per_page')
  34. else:
  35. per_page = current_app.config.setdefault('PER_PAGE', 20)
  36. number = request.args.get('number', per_page, type=int)
  37. if number > 100:
  38. number = per_page
  39. return page, number
  40. @cache.cached(timeout=180, key_prefix=cache_key)
  41. def dispatch_request(self, *args, **kwargs):
  42. return super(BaseMethodView, self).dispatch_request(*args, **kwargs)
  43. class IsAuthMethodView(BaseMethodView):
  44. decorators = [login_required]
  45. class IsConfirmedMethodView(BaseMethodView):
  46. decorators = [is_confirmed, login_required]