Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于类的Python速率限制视图_Python_Python 2.7_Flask_Flask Restful - Fatal编程技术网

基于类的Python速率限制视图

基于类的Python速率限制视图,python,python-2.7,flask,flask-restful,Python,Python 2.7,Flask,Flask Restful,我遵循这个例子: 我的问题是,在示例中,应用程序、限制器和类定义在同一个文件中。在我的示例中,应用程序和限制器定义在同一个文件中,但我的类位于单独的文件中 如果我导入限制器或应用程序,我的烧瓶应用程序不会启动,因为循环。如何解决这个问题,推荐的方法是什么?我想将限制器应用于特定端点。 为了初始化限制器,我尝试了flask import current_app中的,但该函数未将其作为有效参数。有什么建议吗 文件信息: app.py api_main.py 在app.py下,我定义了我的资源:

我遵循这个例子:

我的问题是,在示例中,应用程序、限制器和类定义在同一个文件中。在我的示例中,应用程序和限制器定义在同一个文件中,但我的类位于单独的文件中

如果我导入限制器或应用程序,我的烧瓶应用程序不会启动,因为循环。如何解决这个问题,推荐的方法是什么?我想将限制器应用于特定端点。 为了初始化限制器,我尝试了flask import current_app中的
,但该函数未将其作为有效参数。有什么建议吗

文件信息:

  • app.py
  • api_main.py
在app.py下,我定义了我的资源:

api_app = Flask(__name__)  # Flask Application
api_app.config.from_pyfile("../../../conf/settings.py")  # Flask configuration

imbue_api = restful.Api(api_app)  # Define API
limiter = Limiter(api_app, key_func=get_remote_address, global_limits=["10 per second"])

imbue_api.add_resource(ApiBase, settings.BASE_API_URL)
在api_main.py中,我定义了我的所有类:

class ApiBase(Resource):
    @authenticator.requires_auth
    def get(self):
        """

        :return:
        """
        try:
            # =========================================================
            # GET API
            # =========================================================
            log.info(request.remote_addr + ' ' + request.__repr__())
            if request.headers['Content-Type'] == 'application/json':
                # =========================================================
                # Send API version information
                # =========================================================
                log.info('api() | GET | Version' + settings.api_version)
                response = json.dumps('version: ' + settings.api_version)
                resp = Response(response, status=200, mimetype='application/json')
                return resp

        except KeyError:
            response = json.dumps('Invalid type headers. Use application/json')
            resp = Response(response, status=415, mimetype='application/json')
            return resp

        except Exception, exception:
            log.exception(exception.__repr__())
            response = json.dumps('Internal Server Error')
            resp = Response(response, status=500, mimetype='application/json')
            return resp

使用
资源。方法\u decorators

它适用于每个请求。您可以在视图类中覆盖它:

@property
def method_decorators(self):
    # get some limiter bound to the `g` context
    # maybe you prefer to get it from `current_app`
    return g.limiter
如果愿意,可以在将资源添加到restful API之前,将限制器附加到现有的
方法\u decorators

ApiBase.method_decorators.append(limiter)
imbue_api.add_resource(ApiBase, settings.BASE_API_URL)
ApiBase.method_decorators.append(limiter)
imbue_api.add_resource(ApiBase, settings.BASE_API_URL)