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 }}的模板。


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