【问题标题】:url_for migration to Flask Restful [duplicate]url_for 迁移到 Flask Restful [重复]
【发布时间】:2016-04-30 16:01:03
【问题描述】:

我的 Flask 路由定义如下:

@api_app.route('/api/1.0/infrastructure/', methods=['POST'])
def create_infrastructure():

     return (jsonify({'job': job_instance.reference}), 202,
                    {'Location': url_for('get_job', ref=job_instance.reference, _external=True)})

get_job 函数:

@api_app.route('/api/1.0/job/<string:ref>', methods=['GET'])
def get_job(ref):

        job = Model.Job.query.filter_by(reference=ref).first()
        if not job:
            abort(400)
        return jsonify({'job': job.reference})

我迁移到了 flask.ext.restful 环境,现在看起来像这样:

from flask.ext.restful import Resource
    class Job(Resource):
        def get(self, ref):
            job = Model.Job.query.filter(Model.Job.reference == ref).first()
            if job:
               return jsonify(job.serialize())

            resp = Response(status=404, mimetype='application/json')
            return resp

在这个基于类的 API 中使用 flask.ext.restful 如何在基于类的环境中定义 url_for 参数?

在我的主应用文件中:

api.add_resource(Job, '/api/1.0/job/<string:ref>')
imbue_api.add_resource(Infrastructures, '/api/1.0/infrastructure')

【问题讨论】:

    标签: python rest flask flask-restful


    【解决方案1】:

    最简单的方法是使用flask-restful's Api.url_for

    所以不要写

    url_for('get_job', ...)
    

    你必须这样做

    from flask_restful import Api
    
    Api.url_for(Job, ...)
    

    注意: 确保您不会通过将类相互导入来创建循环导入,这一点很重要。我个人首选的组织方式是在__init__.py 中导入所有相关资源,然后如果您想链接到它们,请使用import .Job,这样您就可以强制执行干净的导入命令。

    【讨论】:

      【解决方案2】:

      感谢我使用了以下内容:

      from flask import current_app
      api = restful.Api
      

      在我的基础设施类中:

      response.headers['Location'] = api.url_for(api(current_app),
                                                                 Job,
                                                                 ref=job_instance.reference,
                                                                 _external=True)
      

      现在工作正常

      【讨论】:

        猜你喜欢
        • 2018-05-31
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多