53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import print_function, unicode_literals, absolute_import, division
|
|
|
|
import six
|
|
from flask import Flask, Response
|
|
from peewee import ModelSelect, Model
|
|
|
|
from domain_admin.compat import Iterator
|
|
from domain_admin.utils.flask_ext.api_result import ApiResult
|
|
from domain_admin.utils.flask_ext.request import Request
|
|
|
|
|
|
class FlaskApp(Flask):
|
|
"""
|
|
扩展Flask
|
|
"""
|
|
# Flask <=2.0.0
|
|
# json_encoder = JSONEncoder
|
|
|
|
# Flask > 2.0.0
|
|
# json_provider_class = JSONProvider
|
|
|
|
request_class = Request
|
|
|
|
# 需要转为json的类型
|
|
json_data_class = (
|
|
ModelSelect,
|
|
Model,
|
|
Iterator,
|
|
list,
|
|
dict,
|
|
six.integer_types,
|
|
six.text_type
|
|
)
|
|
|
|
def make_response(self, rv):
|
|
|
|
if isinstance(rv, self.json_data_class) or rv is None:
|
|
rv = ApiResult.success(rv)
|
|
|
|
if isinstance(rv, ApiResult):
|
|
return Response(rv.to_json(), content_type='application/json;charset=utf-8')
|
|
|
|
return super(FlaskApp, self).make_response(rv)
|
|
|
|
def get(self, rule, **options):
|
|
options.setdefault('methods', ['GET'])
|
|
return super(FlaskApp, self).route(rule, **options)
|
|
|
|
def post(self, rule, **options):
|
|
options.setdefault('methods', ['POST'])
|
|
return super(FlaskApp, self).route(rule, **options)
|