2016-01-24 76 views
2

我有我的瓶的路线是这样定义的:url_for迁移到瓶中宁静

@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') 

回答

3

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

因此,而不是写

url_for('get_job', ...) 

你将不得不

from flask_restful import Api 

Api.url_for(Job, ...) 

注: ,以确保您不会通过导入类到对方创建圆形进口是非常重要的。我个人首选的方法是将所有涉及的资源汇入__init__.py,然后如果你想链接到你的import .Job,那么你可以执行一个干净的进口订单。

0

由于我使用了以下内容:

from flask import current_app 
api = restful.Api 

在我的基础设施类:

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

现在工作正常