zoukankan      html  css  js  c++  java
  • 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过滤器的作用。

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

  • 相关阅读:
    PHP文件上传代码和逻辑详解
    了解thinkphp(二)
    了解ThinkPHP(一)
    php关于static关键字
    php关于return的关键字
    会话控制
    PDO数据库
    PHP包含文件函数include、include_once、require、require_once区别总结
    jQuery事件
    一、MVC模式学习概述
  • 原文地址:https://www.cnblogs.com/captainmeng/p/8732503.html
Copyright © 2011-2022 走看看