我的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')
答案 0 :(得分:3)
最简单的方法是使用flask-restful's Api.url_for
。
所以不要写
url_for('get_job', ...)
你必须
from flask_restful import Api
Api.url_for(Job, ...)
注意:的
重要的是确保您不通过将类导入彼此来创建循环导入。我个人首选的方法是在__init__.py
中导入所有涉及的资源,然后如果要将import .Job
链接到他们,那么就可以强制执行干净的导入订单。
答案 1 :(得分: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)
现在工作正常