# -*- coding: utf-8 -*- from flask import request, render_template, Blueprint from flask.views import MethodView from flaskext.principal import RoleNeed, Permission from models import User from utils.pagination import Pagination admin = Permission(RoleNeed('admin')) auth = Permission(RoleNeed('authenticated')) null = Permission(RoleNeed('null')) class SeniorBlueprint(Blueprint): def expose(self, rule, **options): def decorator(v): endpoint = options.pop("endpoint", v.__name__) options["view_func"] = v.as_view(endpoint) options["methods"] = v.methods self.add_url_rule(rule, **options) return v return decorator class SeniorMethodView(MethodView): def paginate(self, view): page_no = int( request.values.get("page", 1) ) page_size = int( request.values.get("page_size", 30) ) return Pagination(view).paginate(page_no, page_size) user_module = SeniorBlueprint("user", __name__) @user_module.expose('list/<role>/') @user_module.expose('list/') class UserAPI(SeniorMethodView): methods = ["GET", "POST"] decorators = [ auth.require(403) ] #要求登录 def get(self, role=""): if role == "admin": params = dict(is_superuser=True, is_active=True) elif role: params = dict(role=role, is_active=True) else: params = dict(is_active=True) view = Session().query(User).filter_by(**params).order_by("-id") page = self.paginate(view) return render_template("user/list.html", page=page) post = get