flask第二十二篇——模板【4】过滤器

请关注微信公众号:自动化测试实战

先来教大家一个pycharm设置默认模板的方法。我们每次新建模板或者平时写代码打开以后可能都要重复写# coding: utf-8这些代码,其实我们可以设置好模板,让它自动生成的:

  • 打开pycharm的setting(windows)或者preference(Mac)

  • 进入:

 

就可以看到:

 

    右侧就是默认生成的模板了,在这里改成默认生成的代码,以后就不用每次都写那些固定的代码了。

现在我把代码改为:

这样每次我新建flask项目的时候默认就会生成这个模板了。

今天和接下来几天我们继续介绍模板,然后会有一个小项目,不会HTML也没关系,跟着船长一起写就可以了,等学完了flask你发现你会html了,也懂数据库的增删改查了,船长本来想专门讲前端的,后来觉得还是一起说算了,毕竟要不然时间就拖太长了。

过滤器:abs——绝对值

文件结构:

 

flaskDemo.py

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "name": "Warren",
        "age": -18
    }
    return render_template('index.html', **context)

if __name__ == '__main__':
    app.run()

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>{{ age | abs }}</p>
</body>
</html>

 

flaskDemo.py文件中age值是-18,如果我们在index.html文件中直接用{{ age }}那么页面返回的值就是-18,现在我们上面的代码给加了一个过滤器,就是age | abs后面的| abs就是一个过滤器了。在Python里,abs代表取绝对值。现在再执行代码,发现页面返回的就是18了。

| abs中,|叫做管道,所以过滤器就是在变量上,通过管道符号 | 加过滤器名称来使用的。

过滤器:default——默认值

 

我们再讲一个过滤器——default,代码:

flaskDemo.py

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "user": {
            "name": "Warren",
            "age": -18}
    }
    return render_template('index.html', **context)

if __name__ == '__main__':
    app.run()

index.html

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender | default }}</p>
</body>
</html>

 

上面user.gender.py文件里context里是没有这个key的,我们现在执行代码:

看到默认值是空,现在把代码改为{{ user.gender | default('male') }}

也就是我们给gender这个key传一个默认值:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender | default('male') }}</p>
</body>
</html>

 

执行代码,看到:

 

此外,default还可以传一个布尔类型的值,默认是False,就是说如果前面的值有值,那么就返回原值,如果没值(None,False)——False的情况,就用过滤器里面的值:

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "user": {
                "name": "Warren",
                "age": -18,
                "gender": None}
    }
    return render_template('index.html', **context)

if __name__ == '__main__':
    app.run()

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender | default('male', True) }}</p>
</body>
</html>

 

上面代码我们给default传了两个值,第二个是True,这时候执行代码,看到的默认值就是male

如果defaultFalse{{ user.gender | default('male', False) }}那么页面返回的就是None

除了上面的写法以外,还以用or代替,这种情况就是不使用过滤器:
.py文件不变

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender or 'male'}}</p>
</body>
</html>

 

执行代码:

 

过滤器:转义

 

直接看代码比较方便:

flaskDemo.py

# coding: utf-8

from flask import Flask, render_template
import flask

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def login():
    context = {
        "user": {
            "name": "Warren",
            "age": -18,
            "gender": None,
            "comment": u'<script>alert("弹出框")</script>'}
    }
    return render_template('index.html', **context)


if __name__ == '__main__':
    app.run()

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>
    <p>绝对值:{{ user.age | abs }}</p>
    <p>默认值:{{ user.gender or 'male'}}</p>
    <p>转义:{{ user.comment }}</p>
</body>
</html>

 

执行代码,看到页面返回的就是我们.py文件里写的,内容:

现在修改<p>转义:{{ user.comment }}</p><p>转义:{{ user.comment | safe }}</p>,再执行代码:

 

看到页面弹出了alert框,也就是说写的js代码生效了,在js中,弹出框就是<script>alert('提示信息')</script>(大家平时做测试时候也可以在输入框里输入一下这个,看一下开发们对这个有没有处理)。这就是safe过滤器的作用。

明天我们继续讲几个过滤器。今天这个大家趁着休息去试试吧~

posted @ 2018-04-07 10:22  孟船长  阅读(556)  评论(0编辑  收藏  举报