Python Flask Restful:基于URL参数更改表示形式

Python Flask Restful:基于URL参数更改表示形式,python,flask,flask-restful,Python,Flask,Flask Restful,我正在使用Flask和Flask Restful构建API。API可以通过不同种类的工具(web应用程序、自动化工具等)访问,其中一个要求是提供不同的表示(为了示例,我们可以使用json和csv) 如restful文档中所述,根据内容类型更改序列化很容易,因此对于我的CSV序列化,我添加了以下内容: @api.representation('text/csv') def output_csv(data, code, headers=None): #some CSV serialized

我正在使用Flask和Flask Restful构建API。API可以通过不同种类的工具(web应用程序、自动化工具等)访问,其中一个要求是提供不同的表示(为了示例,我们可以使用json和csv)

如restful文档中所述,根据内容类型更改序列化很容易,因此对于我的CSV序列化,我添加了以下内容:

@api.representation('text/csv')
def output_csv(data, code, headers=None):
    #some CSV serialized data
    data = 'some,csv,fields'
    resp = app.make_response(data)
    return resp
当使用curl并传递正确的
-H“Accept:text/csv”
参数时,它就会工作

问题是,由于某些浏览器可能会直接路由到url以下载csv文件,因此我希望能够通过url参数(例如
http://my.domain.net/api/resource?format=csv
其中
格式=csv
的效果与
-H“Accept:text/csv”
相同


我已经阅读了Flask和Flask Restful文档,不知道如何正确处理这个问题

基本上,您希望从GET方法检索参数。请参阅:

只需创建一个子类并重写该方法:


只是想知道:我如何使用CustomApi类?当我这样做时:app=Flask(name)api=CustomApi(app),那么似乎从未使用过重写的mediatypes方法?
from werkzeug.exceptions import NotAcceptable

class CustomApi(Api):
    FORMAT_MIMETYPE_MAP = {
        "csv": "text/csv",
        "json": "application/json"
        # Add other mimetypes as desired here
    }

    def mediatypes(self):
        """Allow all resources to have their representation
        overriden by the `format` URL argument"""

        preferred_response_type = []
        format = request.args.get("format")
        if format:
            mimetype = FORMAT_MIMETYPE_MAP.get(format)
            preferred_response_type.append(mimetype)
            if not mimetype:
                raise NotAcceptable()
        return preferred_response_type + super(CustomApi, self).mediatypes()