Не удается настроить чертежи с колбой - PullRequest
0 голосов
/ 01 октября 2018

Я прочитал эту документацию для настройки колбы с чертежами.Но по какой-то причине мои запросы curl проходят через routes.py.Вот моя файловая структура:

backend
   |-tools.py
   |-app/
      |-project/
          |-__init__.py
          |-heatmap/
               |-__init__.py
               |-routes.py

Файл backend/app/project/__init__.py - это место, где у меня зарегистрированы все чертежи, и где у меня есть метод, который создает приложение для колб, которое я затем вызываю в backend/tools.py.Вот фрагмент того, как я регистрирую чертежи и метод:

backend/app/project/__init__.py

def register_blueprints(app):
    from .heatmap import heatmap_blueprint

    app.register_blueprint(
        heatmap_blueprint,
        url_prefix='/heatmap'
    )

def create_app(debug=False):
    app = Flask(__name__)
    app.debug = debug
    app.url_map.strict_slashes = False
    app.config['SECRET_KEY'] = 'super_secret'

    initialize_extensions(app)
    register_blueprints(app)

    @app.teardown_appcontext
    def close_db(error):
        """Closes the database again at the end of the request."""
        for db_enum in DB:
            db = g.pop(db_enum.value, None)

            if db is not None:
                db.close()

    return app

Вот фрагмент тепловой карты routes.py:

backend/app/project/heatmap/routes.py

from flask import request, render_template

from app.core.heatmap_python.Heatmaps import Heatmaps
from . import heatmap_blueprint


@heatmap_blueprint.route('/', methods=["GET", "POST"])
def index():

    if request.method == "GET":
        return render_template('heatmap/index.html')
    elif request.method == "POST":

        data = request.form.to_dict()

        h = Heatmaps(data)
        response = h.run()

        return render_template('heatmap/results.html', response=response)

Вот файл __init__.py каталога heatmap: backend/app/project/heatmap/__init__.py

from flask_restful import abort, Resource, Api
from webargs import fields
from webargs.flaskparser import use_args
# from investment_tools import api
from flask import Blueprint, url_for
heatmap_blueprint = Blueprint('heatmap', __name__, template_folder='templates',
                                        static_folder='static', static_url_path='/heatmap/static')

from . import routes

api = Api(heatmap_blueprint)
# API

HEATMAPS = {
    'A': {'asd': 'asd'},
    'B': {'bcd': 'bcd'}
}


def abort_if_arg_doesnt_exist(args):
    print(args)


heatmap_args = {
    # All are required arguments
    'currency': fields.Str(required=True),
    'field': fields.Str(required=True),
    'sector': fields.Str(required=True),
    'seniority': fields.Str(required=True),
}


class HeatmapApi(Resource):
    @use_args(heatmap_args)
    def post(self, args):
        print("The args are: ")
        print(args['currency'])
        print(args['field'])
        return "<h1>Hello World</h1>", 201


api.add_resource(HeatmapApi, '/heatmap')

И поэтому, когда я делаю POST запросов в этой настройке, они проходят через файл routes.py.Если я закомментирую эту часть:

@heatmap_blueprint.route('/', methods=["GET", "POST"])
def index():

    if request.method == "GET":
        return render_template('bheatmap/index.html')
    elif request.method == "POST":

        data = request.form.to_dict()

        h = Heatmaps(data)
        response = h.run()

        return render_template('heatmap/results.html', response=response)

Тогда конечная точка сообщения в backend/app/project/heatmap/__init__.py не будет зарегистрирована, так как я получаю сообщение об ошибке, что такой конечной точки нет: TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement. .Так что мои настройки должны быть ошибочными.Не могли бы вы указать мне, что здесь не так?

...