今天下午的时候,我写一个ajax请求以及响应方法,类似这样:
<script type="text/javascript">
$(function () {
$.get("{{ url_for('blueprint.api') }}", function (data) {
console.log(data.test);
});
});
</script>
@blueprint.route('/api', methods=['GET'])
def api():
return jsonify('test': 'success')
测试一下,我本来以为肯定不会有问题的。结果:
Failed to load resource: the server responded with a status of 404 (NOT FOUND)
为什么?
经过一番排查,最后确定是路由写的不对。
在使用蓝图的时候,写了这样的语句:
app.register_blueprint(blueprint, url_prefix='/')
问题就出在url_prefix
这个参数上,将该参数去除,就能够通过测试。但是,我想到另一个情况,于是我保留了参数url_prefix
,转而修改了rule
:
@blueprint.route('api', methods=['GET'])
def api():
return jsonify('test': 'success')
同样通过了测试。
在使用蓝图时,可以使用url_for
方法取得路径。
- 当
url_prefix='/'
,rule='/api'
时,url_for
方法输出/api
,请求失败(Not
Found); - 当
url_prefix='/'
,rule='api'
时,url_for
方法输出/api
,请求成功; - 当
url_prefix=None
或url_prefix=''
,rule='/api'
时,url_for
方法输出/api
,请求成功。
问题来了,为什么情况1会请求失败呢?