Flask Python中的URL前缀使用Blueprint部署到Heroku

问题描述 投票:0回答:1

我正在尝试为我的网络应用程序的api创建一个URL前缀。我想在输入api.website.com/parameter时返回api。我正在使用Flask和Blueprint

api_bp = Blueprint('api', __name__,                        
    template_folder='templates', 
    url_prefix='/api')

@api_bp.route("/")
def get_monkey_api():
    address = request.args.get('address', 
None)
    if address and is_a_banano_address(address):
        return monkey_api(banano_address)
    else:
        return render_template("NotABananoAddress.html"), 400

@api_bp.route("/<address>")
def monkey_api(address):
    monKey = monkey_data_generator.generate_monKey(address)
    if monKey.status is not 'Citizen':
        return "API data on vanity monKeys does not exist"
    return jsonify(monKey.serialize())

app = Flask(__name__)
app.register_blueprint(api_bp, url_prefix='/api')

大多数代码都是无关的。事实是我何时进入

api.website.com?address=xxx

或者当我进入时

api.website.com/xxx

我应该把我的API作为JSON,但我不是。在localhost上它不会返回任何内容,也不显示我甚至插入到代码中的打印件,当然在Heroku上,当我使用前缀时它无法识别项目。

python api flask routing blueprint
1个回答
0
投票

您为蓝图提供了一个URL前缀:

api_bp = Blueprint('api', __name__,                        
    template_folder='templates', 
    url_prefix='/api')

再次与

app.register_blueprint(api_bp, url_prefix='/api')

这意味着您需要使用hostname/api/来获取get_monkey_api()视图函数,或者使用hostname/api/xxxx来获取monkey_api()视图函数。

如果要在站点根目录中找到路由,请删除URL前缀。如果您希望蓝图适用于单独的子域,请使用subdomain='api'选项,而不是URL前缀。

请注意,要使子域工作,您需要配置SERVER_NAME config option以便可以检测到子域。如果要在本地测试,请编辑/etc/hosts文件以添加指向服务器的一些开发别名,然后将SERVER_NAME设置为匹配。

© www.soinside.com 2019 - 2024. All rights reserved.