12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- from flask import (request, flash, redirect, url_for, render_template,
- current_app)
- from flask_login import login_required, current_user
- from flask_maple.views import MethodView as _MethodView
- from forums.permission import confirm_permission
- from forums.extension import cache
- def cache_key():
- if current_user.is_authenticated:
- return 'view:{}:{}'.format(current_user.id, request.url)
- return 'view:{}'.format(request.url)
- def is_confirmed(func):
- def _is_confirmed(*args, **kwargs):
- if confirm_permission.can():
- ret = func(*args, **kwargs)
- return ret
- flash('请验证你的帐号', 'warning')
- return redirect(url_for('user.user', username=current_user.username))
- return _is_confirmed
- class MethodView(_MethodView):
- @property
- def pageinfo(self):
- page = request.args.get('page', 1, type=int)
- if hasattr(self, 'per_page'):
- per_page = getattr(self, 'per_page')
- else:
- per_page = current_app.config.setdefault('PER_PAGE', 20)
- number = request.args.get('number', per_page, type=int)
- if number < -1:
- number = per_page
- if number > 100 or number == -1:
- number = 100
- return page, number
- def dispatch_request(self, *args, **kwargs):
- method = request.method
- meth = getattr(self, method.lower(), None)
- if meth is None and method == 'HEAD':
- meth = getattr(self, 'get', None)
- assert meth is not None, 'Unimplemented method %r' % request.method
- return meth(*args, **kwargs)
- def render_template(self, template, **kwargs):
- return render_template(template, **kwargs)
- class BaseMethodView(_MethodView):
- @cache.cached(timeout=180, key_prefix=cache_key)
- def dispatch_request(self, *args, **kwargs):
- return super(BaseMethodView, self).dispatch_request(*args, **kwargs)
- def render_template(self, template, **kwargs):
- return render_template(template, **kwargs)
- def render(self, template, **kwargs):
- return render_template(template, **kwargs)
- class IsAuthMethodView(BaseMethodView):
- decorators = [login_required]
- class IsConfirmedMethodView(BaseMethodView):
- decorators = [is_confirmed, login_required]
|