Python學習筆記__19.5章 使用模板

# 這是學習廖雪峯老師python教程的學習筆記


Web App不僅僅是處理邏輯,展示給用戶的頁面也非常重要。在函數中返回一個包含HTML的字符串,簡單的頁面還可以,複雜的頁面就無法做到。由於在Python代碼裏拼字符串是不現實的,所以,模板技術出現了

1、模板的使用流程

使用模板,我們需要預先準備一個HTML文檔,這個HTML文檔不是普通的HTML,而是嵌入了一些變量和指令,然後,根據我們傳入的數據,替換後,得到最終的HTML,發送給用戶

image.png

2MVC

上圖的整個流程,就是MVC:Model-View-Controller,中文名“模型-視圖-控制器”。

    1、模型

Model是用來傳給View的,這樣View在替換變量的時候,就可以從Model中取出相應的數據。上面圖的Model就是一個dict:{ 'name': 'Michael' }。

因爲Python支持關鍵字參數,很多Web框架允許傳入關鍵字參數,然後,在框架內部組裝出一個dict作爲Model。

    2、視圖

包含{{ name }}的模板就是View,View負責顯示邏輯,通過簡單地替換一些變量,View最終輸出的就是用戶看到的HTML。上圖的view就是模板

    3、控制器

Python處理URL的函數就是Controller,Controller負責業務邏輯,比如檢查用戶名是否存在,取出用戶信息等等。上圖的控制器就是app.py

3、改造上一節的例子

把上次直接輸出字符串作爲HTML的例子用MVC模式改寫一下

    1、編寫控制器

from flask import Flask, request, render_template

 

app = Flask(__name__)

 

@app.route('/', methods=['GET', 'POST'])

def home():

    return render_template('home.html') # Flask通過render_template()函數來實現模板的渲染

 

@app.route('/signin', methods=['GET'])

def signin_form():

    return render_template('form.html')

 

@app.route('/signin', methods=['POST'])

def signin():

    username = request.form['username']

    password = request.form['password']

    if username=='admin' and password=='password':

        return render_template('signin-ok.html', username=username)

     # 登錄失敗的模板也是form.html

    return render_template('form.html', message='Bad username or password', username=username)

 

if __name__ == '__main__':

    app.run()

和Web框架類似,Python的模板也有很多種。Flask默認支持的模板是jinja2

    2、首頁模板home.html

<html>

<head>

  <title>Home</title>

</head>

<body>

  <h1 style="font-style:italic">Home</h1>

</body>

</html>

    3、登錄表單的模板form.html

<html>

<head>

  <title>Please Sign In</title>

</head>

<body>

  {% if message %}

  <p style="color:red">{{ message }}</p>

  {% endif %}

  <form action="/signin" method="post">

    <legend>Please sign in:</legend>

    <p><input name="username" placeholder="Username" value="{{ username }}"></p>

    <p><input name="password" placeholder="Password" type="password"></p>

    <p><button type="submit">Sign In</button></p>

  </form>

</body>

</html>

    4、登錄成功的模板signin-ok.html

<html>

<head>

  <title>Welcome, {{ username }}</title>

</head>

<body>

  <p>Welcome, {{ username }}!</p>

</body>

</html>

    5、把模板放到正確的templates目錄下,templatesapp.py在同級目錄下

image.png

    6、Jinja2模板

在Jinja2模板中,我們用{{ name }}表示一個需要替換的變量。很多時候,還需要循環、條件判斷等指令語句,在Jinja2中,用{% ... %}表示指令

循環輸出頁碼:

{% for i in page_list %}

    <a href="/page/{{ i }}">{{ i }}</a>

{% endfor %}

    7、其他常見模板

  • Mako:用<%      ... %>${xxx}的一個模板;

  • Cheetah:也是用<%      ... %>${xxx}的一個模板;

  • Django:Django是一站式框架,內置一個用{%      ... %}{{ xxx }}的模板。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章