Как сделать колбу.перенаправление, работающее с marshal_with

#python #flask #flask-restful

Вопрос:

В настоящее время я работаю над проектом flask restful, который требует, чтобы я перенаправлял запрос с одной конечной точки на другую конечную точку, и я использую flask.redirect для этого. Однако flask.redirect не работает, когда конечная точка имеет marshal_with . У кого-нибудь есть какие-либо идеи о том, как заставить flask.redirect работать с marshal_with ?

Вот пример кода:

 import flask
from flask import Flask
from flask_restx import Model, Resource, fields, Namespace, abort, Api
from werkzeug.middleware.proxy_fix import ProxyFix
app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
api = Api(app, version='1.0', title='TodoMVC API',
    description='A simple TodoMVC API',
)

ns = Namespace('todos', description='TODO operations')
ns2 = Namespace('todos2', description='TODO operations')

todo = Model('todo', {
    'id': fields.Integer(required=True, description='The task unique identifier'),
    'task': fields.String(required=True, description='The task details'),
    'description': fields.String(required=True, description='Put some description here')
})

response = Model('response', {
    'id': fields.Integer,
    'task': fields.String
})

ns.models[todo.name] = todo
ns.models[response.name] = response

todo2 = Model('todo2', {
    'task': fields.String(required=True, description='The task details'),
    'todo_description': fields.String(required=True, description='Put some description here')
})

response2 = Model('response2', {
    'id': fields.Integer,
    'task': fields.String
})

ns2.models[todo2.name] = todo2
ns2.models[response2.name] = response

api.add_namespace(ns)
api.add_namespace(ns2)

@ns2.route('/<int:id>')
@ns2.response(404, 'Todo not found')
class Todo(Resource):
    '''Show a single todo item and lets you delete them'''
    @ns2.doc('get_todo')
    def get(self, id):
        '''Fetch a given resource'''
        return "get todo 2"

    @ns2.expect(todo2)
    @ns2.marshal_with(response)
    def post(self, id):
        '''Update a task given its identifier'''
        if id == 1:
            redirection = flask.redirect(flask.url_for('todos_todo_list', _method='POST'), code=307)
            return redirection
        return {"id": "dummy id", "task": "some dummy task here"}


@ns.route('/')
class TodoList(Resource):
    '''Shows a list of all todos, and lets you POST to add new tasks'''
    @ns.doc('list_todos')
    def get(self):
        '''List all tasks'''
        return "get todo list"

    @ns.doc('create_todo')
    @ns2.expect(todo)
    @ns.marshal_with(response)
    def post(self):
        '''Create a new task'''
        payload = ns.payload
        return {"id": payload.get("id"), "task": payload.get("task")}


if __name__ == '__main__':
    app.run(debug=True)