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

时间:2018-08-04 22:29:56

标签: python api flask routing blueprint

我正在尝试为Web应用程序的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

我应该以JSON的形式获取我的API,但事实并非如此。在本地主机上,它不返回任何内容,也不显示我什至在代码中插入的打印内容,当然,在Heroku中,当我使用前缀时,它无法识别项目。

1 个答案:

答案 0 :(得分: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设置为匹配。