2014-12-03 31 views
0

我有一個包含一些資源(數據文件)的靜態目錄,我可以直接訪問這些文件:即http://hello.com/static/dir/abc.pdf。但是,我把目錄作爲地址出錯了:即http://hello.com/static/dir使用Flask重定向到靜態目錄中的資源文件

使用燒瓶,我可以通過顯示目錄的內容來解決這個問題。

@app.route('/static/<path:url>') @protect 
def show(url): 
    content_dir = app.config['CONTENT_DIR'] 
    directory = "%s/%s/box/%s" % (content_dir, url, url2) 
    result = [] 

    if os.path.isdir(directory): 
     for file in os.listdir(directory): 
      content['url'] = '/static/... 
     result.append(content) 
    return render_template("box.html",...) 

的問題是,這種路由處理,直接訪問文件不能正常工作更多的是http://hello.com/static/dir/abc.pdf始終觸發show()方法。

如何重定向到資源文件(示例中爲abc.pdf),而不被重定向到show()方法?

+0

你可以檢查'url'是否以文件擴展名結尾。 – Celeo 2014-12-03 22:57:01

+0

理想情況下,您不會在生產中使用開發服務器。你應該讓你的http服務器擔心這一點。 – dirn 2014-12-03 23:05:51

回答

1

在您的自定義靜態路由中,檢查路徑是文件還是目錄。如果它是一個文件,則提供它,否則顯示目錄索引。

import os 
from flask import send_file 

path = os.path.join(app.config['CONTENT_DIR'], url, 'box', url2) 

if os.path.isfile(path): 
    return send_file(path) 

return render_template('box.html', ...) 

當然,由於路徑是由用戶發送的url指定的,因此應該首先檢查它是否安全。