在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  HTML/ 關(guān)于flask中的藍(lán)圖和路由的一個(gè)問題

關(guān)于flask中的藍(lán)圖和路由的一個(gè)問題

今天下午的時(shí)候,我寫一個(gè)ajax請求以及響應(yīng)方法,類似這樣:

<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')

測試一下,我本來以為肯定不會(huì)有問題的。結(jié)果:

Failed to load resource: the server responded with a status of 404 (NOT FOUND)

為什么?
經(jīng)過一番排查,最后確定是路由寫的不對。
在使用藍(lán)圖的時(shí)候,寫了這樣的語句:

app.register_blueprint(blueprint, url_prefix='/')

問題就出在url_prefix這個(gè)參數(shù)上,將該參數(shù)去除,就能夠通過測試。但是,我想到另一個(gè)情況,于是我保留了參數(shù)url_prefix,轉(zhuǎn)而修改了rule

@blueprint.route('api', methods=['GET'])
def api():
    return jsonify('test': 'success')

同樣通過了測試。
在使用藍(lán)圖時(shí),可以使用url_for方法取得路徑。

  1. 當(dāng)url_prefix='/'rule='/api'時(shí),url_for方法輸出/api,請求失?。∟ot
    Found);
  2. 當(dāng)url_prefix='/',rule='api'時(shí),url_for方法輸出/api,請求成功;
  3. 當(dāng)url_prefix=Noneurl_prefix='',rule='/api'時(shí),url_for方法輸出/api,請求成功。

問題來了,為什么情況1會(huì)請求失敗呢?

回答
編輯回答
悶騷型
# 路徑
# from flask.blueprints import Blueprint
# 然后看下其中的這個(gè)方法
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
  """A helper method to register a rule (and optionally a view function)
  to the application.  The endpoint is automatically prefixed with the
  blueprint's name.
  """
  if self.url_prefix:
    rule = self.url_prefix + rule
  options.setdefault('subdomain', self.subdomain)
  if endpoint is None:
    endpoint = _endpoint_from_view_func(view_func)
  defaults = self.url_defaults
  if 'defaults' in options:
    defaults = dict(defaults, **options.pop('defaults'))
  self.app.add_url_rule(rule, '%s.%s' % (self.blueprint.name, endpoint),
                        view_func, defaults=defaults, **options)
                        
# 所以你1中的路徑需要訪問的是 //api
# 假如 //api 訪問不到的話,需要看下你是不是做了類似于 /* 的配置
2017年11月21日 18:05