Flask 框架



Flask 是一個微框架,對外部庫的依賴非常少。它是一個非常輕量級的框架,讓我們可以自由地做任何我們想做的事情。

在本章中,我們將使用 Python 和 Flask 框架構建一個專案。

Flask 啟動和配置

像大多數廣泛使用的 Python 庫一樣,Flask 包可以從 Python 包索引 (PPI) 中安裝。讓我們首先建立一個目錄(在本章中,我們建立了一個名為 flaskProject 的目錄),然後建立一個虛擬環境(並將其命名為 flaskEnv),所有與專案相關的依賴項都將載入到其中(包括 Flask)。您還可以安裝 flask-sqlalchemy,以便您的 Flask 應用程式能夠以簡單的方式與 SQL 資料庫通訊。

安裝 Flask 後,您的 flaskEnv(我們的虛擬環境名稱)將顯示如下內容:

Flask Startup

使用 Flask 建立應用程式

透過安裝 Flask,我們可以使用很少的程式碼行建立一個簡單的“Flask 中的 Hello 應用”,如下所示:

Creating Flask

在終端中輸入以下內容:

$python flaskapp.py

您將看到以下輸出:

正在運行於 http://127.0.0.1:5000/localhost:5000

Running Localhost

以下是我們在示例程式碼中所做操作的解釋:

  • 首先,我們匯入 Flask 類庫。此類的一個例項是 WSGI 應用程式。

  • 其次,我們建立此類的一個例項。應用程式包或模組名稱是我們的第一個引數。Flask 必須知道在哪裡查詢靜態檔案、模板和其他檔案,這是強制性的。

  • 接下來是 route() 裝飾器,我們使用它來了解哪個 URL 應該觸發我們的方法/函式。

建立 URL 路由

URL 路由使 Web 應用程式中的 URL 易於記憶。我們現在將建立一些 URL 路由:

/hello
/members
/members/name

我們可以根據上述 URL 編寫以下程式碼並將其儲存為 app.py。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
   return "Index!"
	
@app.route('/Hello')
def hello():
   return "Hello, World!"
	
@app.route("/members")
def members():
   return "Members"
	
@app.route("/members/<name>/")
def getMember(name):
   return name
	
if __name__ == '__main__':
   app.run(debug=True)
重新啟動應用程式後,我們使用以下程式碼行在不同的 URL 上獲取不同的輸出:

$ python app.py

正在運行於 https://:5000/

我們將在瀏覽器中獲得以下輸出:

Localhost Index

我們可以在瀏覽器中嘗試其他 URL,如下所示:

正在運行於 https://:5000/hello,將給出以下輸出:

Localhost Browser

正在運行於 https://:5000/members,將給出:

Localhost Members

正在運行於 https://:5000/members/TutorialsPoint/,將給出以下輸出:

Localhost Tutorialspoint

但是通常我們不希望返回字串(如上所示),我們返回模板。為此,我們希望使用 Flask 中的函式“render_template”,並使用一些輸入返回 render_template。因此,以下函式將完成我們的工作:

from flask import render_template
return render_template(‘home.html’)

讓我們建立一個名為 template 的資料夾,並將 home.html 檔案放在其中。

接下來,我們將討論佈局。我們無需為每個模板都使用 html head 標籤和 body 標籤,而是將設計一個佈局來包含 head & body 標籤,幷包裝當前檢視或當前模板。為此,我們必須建立一個單獨的檔案並將其命名為 layout.html。在此檔案中,我們可以放置正常的 head 標籤、body 標籤以及所有其他必需的標籤。

我們可以使用以下程式碼行建立新的 layout.html:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>MyFlaskApp</title>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
   </head>
   <body>
      {% include 'includes/_navbar.html' %}
      <div class="container">
      {% block body %}
      {% endblock %}
      </div>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js">
      </script>
   </body>
</html>

在上面的程式碼中,我們給標題設定了 track,MyFlaskAp,在 head 中使用了 css cdn,並在 body 塊中使用了 javascript 以啟用 Bootstrap。

現在,我們必須為每個頁面建立導航欄。為此,我們必須首先建立一個名為 include 的資料夾,然後在其中建立 _navbar.html 檔案。現在,在 _navbar.html 中,我們必須使用 getbootstrap.com 中的標準啟動模板。新建立的 _navbar.html 檔案將如下所示:

Navbar

並將此 _navbar.html 檔案包含到我們的 layout.html 檔案中。

{% include 'includes/_navbar.html' %}

由於我們有 layout 塊,因此我們可以在 home 檔案(home.html)中擴充套件此塊。

我們的 home.html 檔案可以使用以下程式碼建立:

{% extends 'layout.html' %}
{% block body %}
   <div class="jumbotron text-center">
      <h1>Welcome to FlaskApp</h1>
      <p>This application is built on Flask webframework!</p>
   </div>
{% endblock %}

使用此方法,如果我們嘗試執行 flaskapp.py 檔案,那麼我們可以在瀏覽器中看到以下輸出:

Welcome Flask

現在我們希望啟用(當前選項卡不起作用)我們的 about 選項卡。為 about 選項卡建立一個路由並建立一個模板檔案 about.html

appflask.py 中的 about 選項卡路由將如下所示:

About Tab

about.html 檔案將包含以下內容:

About Html

因此,Home 和 About 現在都已處理。對於 Articles,我們可以在根目錄中建立一個新檔案(data.py),在其中放置資料並在我們的網頁中呼叫它。

data.py

def Articles():
   articles = [
      {
         'uid': 1,
         'title': 'Article_One',
         'body': 'Flask, being a microframework, often requires some repetitive step
            to get a third party library working. Because very often these steps could 
            be abstracted to support multiple projects the Flask Extension Registry 
            was created.',
         'Author': 'Rajesh Joshi',
         'Created-on': '07-09-2018'
      },
      {
         'uid': 2,
         'title': 'Article_Two',
         'body': "Flask, being a microframework, often requires some repetitive steps
            to get a third party library working. Because very often these steps could 
            be abstracted to support multiple projects the Flask Extension Registry 
            was created.",
         'Author': 'Rajesh J',
         'Created-on': '07-09-2018'
      },
      {
         'uid': 3,
         'title': 'Article_Three',
         'body': 'Flask, being a microframework, often requires some repetitive steps
            to get a third party library working. Because very often these steps could be
            abstracted to support multiple projects the Flask Extension Registry 
            was created.',
         'Author': 'Joshi Rajesh',
         'Created-on': '07-09-2018'
      }
   ]
   return articles

以下是 articles.html 的程式碼,它將為每個 uid 顯示文章標題。

{% extends 'layout.html' %}
{% block body %}
   <h1>Articles</h1>
   {% for article in articles %}
      <li class="list-group-item">
         <a href="article/{{article.uid}}"> {{article.title}}</a>
      </li>
   {% endfor %}
{% endblock %}

總而言之,Flask 是最流行的 Python Web 框架之一,因為它輕量級。雖然它是微框架,但它是一個可擴充套件的 Python Web 框架。透過提供所需的功能,Flask 加速了簡單 Web 應用程式的開發。因此,Flask 更適合於較小、不太複雜的應用程式。

廣告