Flask 介紹
知識點
- 微框架、WSGI、模板引擎概念
- 使用 Flask 作 web 應用
- 模板的使用
- 根據 URL 返回特定網頁
實驗步驟
1. 什麼是 Flask?
Flask 是一個 web 框架。也就是說 Flask 爲你提供工具,庫和技術來容許你構建一個 web 應用程序。這個 wdb 應用程序可使一些 web 頁面、博客、wiki、基於 web 的日曆應用或商業網站。javascript
Flask 屬於微框架(micro-framework)這一類別,微架構一般是很小的不依賴於外部庫的框架。這既有優勢也有缺點,優勢是框架很輕量,更新時依賴少,而且專一安全方面的 bug,缺點是,你不得不本身作更多的工做,或經過添加插件增長本身的依賴列表。Flask 的依賴以下:css
維基百科 WSGI 的介紹:html
Web服務器網關接口(Python Web Server Gateway Interface,縮寫爲WSGI)是爲Python語言定義的Web服務器和Web應用程序或框架之間的一種簡單而通用的接口)。自從WSGI被開發出來之後,許多其它語言中也出現了相似接口。java
2. 什麼是模板引擎?
你搭建過一個網站嗎?你面對過保持網站風格一致的問題嗎,你不得不寫屢次相同的文本嗎?你有沒有試圖改變這種網站的風格?python
若是你的網站只包含幾個網頁,改變網站風格會花費你一些時間,這確實可行。儘管如此,若是你有許多頁面(好比在你商店裏的售賣物品列表),這個任務便很艱鉅。web
使用模板你能夠設置你的頁面的基本佈局,並說起哪一個元素將發生變化。這種方式能夠定義您的網頁頭部並在您的網站的全部頁面使它保持一致,若是你須要改變網頁頭部,你只須要更新一個地方。flask
使用模板引擎建立/更新/維護你的應用會節約你不少時間。vim
3. "Hello World" 應用
咱們將使用 flask 完成一個很是基礎的應用。安全
- 安裝 flask
$ sudo pip3 install flask
- 建立項目結構
$ mkdir -p hello_flask/{templates,static}
這是你的 web 應用的基本結構:bash
$ tree hello_flask/ hello_flask |-- static `-- templates 2 directories, 0 files
templates
文件夾是存放模板的地方,static
文件夾存放 web 應用所需的靜態文件(images, css, javascript)。
- 建立應用文件
$ cd hello_flask $ vim hello_flask.py
hello_flask.py 文件裏編寫以下代碼:
#!/usr/bin/env python import flask # Create the application. APP = flask.Flask(__name__) @APP.route('/') def index(): """ 顯示可在 '/' 訪問的 index 頁面 """ return flask.render_template('index.html') if __name__ == '__main__': APP.debug=True APP.run()
- 建立模板文件
index.html
$ vim templates/index.html
index.html 文件內容以下:
<!DOCTYPE html> <html lang='en'> <head> <meta charset="utf-8" /> <title>Hello world!</title> <link type="text/css" rel="stylesheet" href="{{ url_for('static', filename='hello.css')}}" /> </head> <body> It works! </body> </html>
- 運行 flask 應用程序
$ python3 hello_flask.py
訪問 http://127.0.0.1:5000/,這應該只是顯示黑字白底的 "It works!" 文本,以下圖:
4. Flask 中使用參數
在本節中咱們將要看到如何根據用戶使用的 URL 返回網頁。
爲此咱們更新 hello_flask.py 文件。
- 在 hello_flask.py 文件中添加如下條目
@APP.route('/hello/<name>/') def hello(name): """ Displays the page greats who ever comes to visit it. """ return flask.render_template('hello.html', name=name)
- 建立下面這個模板 hello.html
<!DOCTYPE html> <html lang='en'> <head> <meta charset="utf-8" /> <title>Hello</title> <link type="text/css" rel="stylesheet" href="{{ url_for('static', filename='hello.css')}}" /> </head> <body> Hello {{name}} </body> </html>
- 運行 flask 應用
$ python3 hello_flask.py
訪問 http://127.0.0.1:5000/ ,這應該只是顯示黑字白底的 "It works!" 文本。
訪問http://127.0.0.1:5000/hello/you,這應該返回文本 "Hello you",見下圖:
不管你在 URL 中 /hello/
後填寫的什麼,都會出如今返回的網頁中。
這是你第一次使用模板,咱們在 hello_flask.py 中創建了 name
變量(參見 hello 函數的 return 行)。經過語法 {{name}}
,name 變量以後在頁面中顯示其自身。
5. 額外工做
5.1. 使用模板
目前,對於每個頁面咱們都建立了一個模板,其實這是很差的作法,咱們應該作的是建立一個主模板而且在每一個頁面使用它。
- 建立模板文件 master.html。
<!DOCTYPE html> <html lang='en'> <head> <meta charset="utf-8" /> <title>{% block title %}{% endblock %} - Hello Flask!</title> <link type="text/css" rel="stylesheet" href="{{ url_for('static', filename='hello.css')}}" /> </head> <body> {% block body %}{% endblock %} </body> </html>
- 調整模板 index.html。
{% extends "master.html" %} {% block title %}Home{% endblock %} {% block body %} It works! {% endblock %}
正如你所看到的,在 master.html 模板中咱們定義了兩部分,名爲 title
和 body
的 blocks
。
在模板 index.html 中,咱們聲明這個模板擴展自 master.html 模板,而後咱們定義了內容來放在這兩個部分中(blocks)。在第一個 block title
中,咱們放置了 Home
單詞,在第二個 block body
中咱們定義了咱們想要在頁面的 body 中有的東西。
- 做爲練習,更改其餘模板 hello.html,一樣要使用 master.html。
- 在 hello 頁面添加首頁連接。
調整模板 hello.html,添加到首頁的連接。
<a href="{{ url_for('index') }}"><button>Home</button></a>
- 做爲你的任務,在首頁添加到 hello 頁面的連接。
總結
本實驗中咱們瞭解了微框架、WSGI、模板引擎等概念,學習使用 Flask 作一個 web 應用,在這個 web 應用中,咱們使用了模板。而用戶以正確的不一樣 URL訪問服務器時,服務器返回不一樣的網頁。最後還給你們留了一個小任務,但願你們能完成。
這裏只介紹了 Flask 不多的一部分,有興趣的能夠學習 Flask 的官方文檔。