Я занимался этой проблемой в течение двух дней, и у меня пока нет никаких решений. В последнее время я хочу переместить мои маршруты в моем приложении из маршрутов ванильной фляги в маршруты фляги-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? спасибо:)