`
ryan.liu
  • 浏览: 133939 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

flask的MethodView封装

阅读更多

 

# -*- 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics