天天看點

Python Flask學習知識點(七)

Python Flask學習知識點(七)

timg (11).jpg

靜态檔案通路原理

app檔案夾下建立檔案夾static,放入一張圖檔demo.jpg,然後通路伺服器啟動預設位址127.0.0.1:81/static/demo.jpg就可以通路到這張圖檔。

問:為什麼Flask可以在任何代碼不編寫的情況下自動讀取到static目錄下的圖檔檔案?

答:因為Flask對于靜态檔案是有預設值設定的,預設情況下,Flask認為靜态檔案夾的名字就叫ststic,并且位于應用程式的根目錄下的,也就是app檔案夾目錄下。

Python Flask學習知識點(七)

image.png

問:為什麼應用程式根目錄是app目錄而不是app上邊的flaskDemo目錄?

答:因為在執行個體化Flask核心對象是傳入了一個參數,如下代碼:

def create_app():
    app = Flask(__name__)
    app.config.from_object('app.secure')
    app.config.from_object('app.setting')

    register_blueprint(app)
    db.init_app(app)
    db.create_all(app=app)
    return app
           

__name__

這個參數決定了我們應用程式的根目錄是app目錄。

如果不想使用預設的static作為靜态檔案存儲路徑,可以通過更改配置來通路,

app = Flask(__name__, static_folder='web/img')
           

更改成為這個路徑,就要這樣通路:127.0.0.1:81/img/demo.jpg,

還可以這麼改:

app = Flask(__name__, static_folder='web/img', static_path='')
           

但是我們一般還是使用Flask預設設定即可,如果确實有需求,具體使用詳情請查閱官方文檔。

靜态檔案放到藍圖中

之前說過,Flask裡有兩個層級:

  1. Flask核心對象:應用程式級别
  2. 藍圖

對于靜态檔案,也有兩個級别:

  1. 應用程式static
  2. 藍圖static

如果你認為你的靜态檔案是針對你的藍圖的話,那麼你其實是可以把靜态檔案注冊到藍圖上邊,而不是注冊到應用程式上邊。

Python Flask學習知識點(七)

藍圖的相關方法其實幾乎就是複制了Flask核心對象的api,基本參數都是一緻的。

藍圖注冊靜态檔案夾:

from flask import Blueprint

# 藍圖
web = Blueprint("web", __name__, static_folder='', static_url_path='')
           

模闆檔案

模闆就是html,但是和普通html不同,模闆是沒有資料的,它等待填充資料。

app檔案夾下建立檔案夾templates,建立html檔案:test.html:

Python Flask學習知識點(七)

同上邊提到的static檔案夾一樣,我們可以自定義templates檔案夾的位置,通過更改

template_folder=

參數來自定義templates檔案夾的位置,例如,把templates檔案夾移動到web檔案夾下後需改動:

兩種更改方法:

  1. Flask核心對象上更改:

    app = Flask(__name__, template_folder='web/templates')

  2. 在藍圖對象上更改:

    web = Blueprint("web", __name__, template_folder='templates')

現在要把視圖函數中傳回的資料填充到模闆test.html中,使用Flask内置的方法:

render_template()

from flask import render_template

@web.route('/test')
def test():
    r = {
        "name": "allen",
        'age': 24
    }

    r1 = {
        "name": "zhao",
        "age": 12
    }
    return render_template('test.html', data=r, data1=r1)
           

模闆語言 Jinja2

如何在模闆中組織、解析相關資料

編輯test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>demo</h1>
{{data.age}}
{{data1.age}}
</body>
</html>
           

運作代碼,浏覽器輸入127.0.0.1:8000/test

Python Flask學習知識點(七)

可以看到,之前我們寫在視圖函數中的資料已經展示到頁面了。

Flask為了讓我們很好的在模闆解析和展示資料,它引入了一個模闆引擎,叫做Jinja2。

Jinja2有自己的文法,例如注釋代碼:{#hello word#},這裡就把hello word注釋掉了。

我們的pycharm預設是不會像寫python代碼一樣智能提示Jinja2的文法,但是,更改設定即可:

Python Flask學習知識點(七)

Jinja2也叫做模闆語言,

Flask官方推薦我們使用Jinja2,大家也可以自己使用其他的模闆語言。