天天看點

【Azure 應用服務】Azure App Service (Windows) 使用Flask架構部署Python應用,如何在代碼中通路靜态檔案呢?如何設定檔案路徑?是相對路徑還是絕對路徑呢?

問題描述

使用Flask架構部署Python代碼,如何通路其中的靜态檔案呢?如static問價夾中的圖像資源,同時如何在代碼中讀取txt檔案中的内容呢?是相對路徑或者是絕對路徑呢?

實驗步驟

在App Service (Windows)環境中部署Flask Python應用時,需要考慮注意參考文檔“釋出到 Windows 上的 Azure 應用服務”, Python項目的Web.config内容為:

<system.webServer>
  <handlers>
    <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
        scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
        resourceType="Unspecified" requireAccess="Script"/>
  </handlers>
</system.webServer>      

而特别對于Flash項目,需要添加項目的啟動配置:

Flask:将 

WSGI_HANDLER

 值更改為 

<project_name>.app

,其中 

<project_name>

 與項目名稱比對。 可通過檢視 

runserver.py

 中的 

from <project_name> import app

 語句,找到準确的辨別符。 例如,如果項目命名為“FlaskAzurePublishExample”,則該條目如下所示:
<!-- Flask apps only: change the project name to match your app -->
<add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>      

以下的實驗是在通過相對路徑通路靜态圖檔:

  • 首先項目路徑如下(項目釋出到Azure後,通過Kudu站點檢視項目檔案路徑)
【Azure 應用服務】Azure App Service (Windows) 使用Flask架構部署Python應用,如何在代碼中通路靜态檔案呢?如何設定檔案路徑?是相對路徑還是絕對路徑呢?
    • 靜态檔案放在了static這個檔案夾下
    • test.py運作代碼如下:
    • from flask import Flask,render_template
       
      app = Flask(__name__, static_folder='', static_url_path='')
      @app.route('/')
      def index():
          return render_template('index.html')
          
      if __name__ == '__main__':
      app.run()      
  • 通路的時候用url_for函數,templates檔案夾下的index.html如下:
【Azure 應用服務】Azure App Service (Windows) 使用Flask架構部署Python應用,如何在代碼中通路靜态檔案呢?如何設定檔案路徑?是相對路徑還是絕對路徑呢?
  • 測試結果,直接通路站點根目錄時可以通路到靜态檔案
【Azure 應用服務】Azure App Service (Windows) 使用Flask架構部署Python應用,如何在代碼中通路靜态檔案呢?如何設定檔案路徑?是相對路徑還是絕對路徑呢?

以上是通過HTML通路項目中的靜态資源檔案,如果是需要通過代碼的方式讀取txt檔案中的内容,由于可能存在釋出後的相對路徑與本地測試時候路徑不一緻,是以建議使用部署在App Service中的絕對路徑。如:open(‘D:/hone/site/wwwroot/static/test.txt’,’r’)  

但如果一定需要使用相對路徑,這可以考慮使用App Service Home路徑的環境變量,如:open(‘%HOME%/site/wwwroot/static/test.txt,’r’) 。

參考資料

釋出到 Windows 上的 Azure 應用服務:https://docs.microsoft.com/zh-cn/visualstudio/python/publish-to-app-service-windows?view=vs-2019#publish-to-app-service---visual-studio-2017-and-later

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀