Flask-restplus Serve Static с использованием API Route - PullRequest
0 голосов
/ 05 апреля 2019

Я занимался этой проблемой в течение двух дней, и у меня пока нет никаких решений. В последнее время я хочу переместить мои маршруты в моем приложении из маршрутов ванильной фляги в маршруты фляги-restplus api, чтобы упростить документирование. Тем не менее, я обнаружил, что не могу обслуживать свою статическую папку в моей корневой конечной точке (я использую статические файлы, сгенерированные веб-пакетом с использованием реакции). Там написано, что маршрут не найден.

Я пытался искать ответы в документах или что-то еще, но я нашел только решения, которые пришли из ванильной колбы.

Вот код:

import os
import json
import datetime
import pprint

from bson.objectid import ObjectId
from flask import Flask, Blueprint, send_from_directory
from flask_sqlalchemy import SQLAlchemy
from flask_security import SQLAlchemyUserDatastore, login_required
from flask_cors import CORS
from flask_restplus import Resource

from app.auth import oauth
from app.plugins import db, security, users, roles, api

def create_app(test_config=None):
    project_root = os.path.dirname(os.path.dirname(__file__))
    app = Flask(__name__, static_url_path='/public', static_folder='./public', instance_relative_config=True)
    app.config.from_object('instance.config.Config')
    app.config.from_pyfile('config.py', silent=True)
    CORS(app)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass 


    with app.app_context():
        # from config import Config
        from app.routes.main import routes_blueprint
        from app.routes.auth import routes_auth_blueprint
        from app.routes.db import routes_db_blueprint

        # setup DB 
        db.init_app(app)

        # setup security
        user_datastore = SQLAlchemyUserDatastore(db, users, roles)
        security.init_app(app, user_datastore)

        # create roles
        db.create_all()
        admin_role = user_datastore.find_or_create_role('admin')
        user_role = user_datastore.find_or_create_role('user')

        # set config for datastore
        app.config['user_datastore'] = user_datastore
        app.config['admin_role'] = admin_role
        app.config['user_role'] = user_role


        # setup RESTPlus API
        doc_blueprint = Blueprint('api', __name__, url_prefix='/api')
        api.init_app(doc_blueprint, version='0.1', title='BK API CONSOLE SERVER', description='Prototype of BK\'s next API server')

        # setup OAuth from Auth0
        oauth.init_app(app)

        @api.route('/', defaults={'path': ''})
        @api.route('/<path:path>')
        class Home(Resource):
            def get(self, path):
                print('path' + path)
                if path != "" and os.path.exists("public/build/" + path):
                    # print(f"path!= ''  = {os.path.exists('public/build' + path)}")
                    return send_from_directory(os.path.join(project_root, 'public/build'), path)
                else:
                    # print(f"else = {os.path.exists('public/build' + path)}")
                    return send_from_directory(os.path.join(project_root, 'public/build'), 'index.html')

        app.register_blueprint(doc_blueprint)
        app.register_blueprint(routes_blueprint)
        app.register_blueprint(routes_auth_blueprint)
        app.register_blueprint(routes_db_blueprint)

        return app

Итак, мой вопрос: как мне подать статический сигнал с flask-restplus? спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...