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

先来教大家一个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:

如果default传False,{{ 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过滤器的作用。

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

flask第二十二篇——模板【4】过滤器的更多相关文章

  1. flask第二十四篇——模板【6】自定义过滤器

    请关注孟船长的公众号:自动化测试实战 大家想了解其他过滤器可以参考这里: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters ---- ...

  2. flask第二十六篇——模板【控制语句】【2】

    如果你也在学flask,就请加船长的公众号:自动化测试实战 我们先补充一下for循环的知识,我们之前说过,flask是由Jinja2+sqlAlchemy+werkzeug组成的,我们现在学的控制语句 ...

  3. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  4. 【Python之路】第二十二篇--Django【基础篇】

    1 Django流程介绍 MTV模式       著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业 ...

  5. flask第十九篇——模板【3】

    请关注微信公众号:自动化测试实战 今天我们继续模板的知识,现在我们增加字典的复杂度,这个时候在render_template第二个参数可以传**title,以后我们会用**context代替原来的ti ...

  6. flask第十八篇——模板【2】

    请关注公众号:自动化测试实战 上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时: ...

  7. Python之路(第二十二篇) 面向对象初级:概念、类属性

    一.面向对象概念 1. "面向对象(OOP)"是什么? 简单点说,“面向对象”是一种编程范式,而编程范式是按照不同的编程特点总结出来的编程方式.俗话说,条条大路通罗马,也就说我们使 ...

  8. flask第二十五篇——控制语句

    有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...

  9. 第二十二篇、IO多路复用 一

    一.简介io多路复用 可以监听多个文件描述符(socket对象)(文件句柄),一旦文件句柄出现变化,就会感知到 Linux中的 select,poll,epoll(内核2.6以上) 都是IO多路复用的 ...

随机推荐

  1. Learning to Rank之RankNet算法简介

    排序一直是信息检索的核心问题之一, Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Learning to Rank ...

  2. Python: 矩阵与线性代数运算

    需要执行矩阵和线性代数运算,比如矩阵乘法.寻找行列式.求解线性方程组等等. 矩阵类似于3.9 小节中数组对象,但是遵循线性代数的计算规则.下面的一个例子展示了矩阵的一些基本特性: >>&g ...

  3. HDU1160FatMouse's Speed

    #include<stdio.h> #include<string.h> #include<algorithm> #include<set> #incl ...

  4. Java学习笔记之MyEclipse 2017 CI 7、CI 8、CI 9和CI 10的安装与激活

    0x00 前言 本文介绍MyEclipse 2017 CI 7.CI 8.CI 9和CI 10的安装与激活. 重要提示:此方法理论上应该能激活MyEclipse 2017 CI所有系列,即激活方法是通 ...

  5. Python面试题之Python中的类和实例

    0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...

  6. 常用php操作redis命令整理(二)哈希类型

    HSET将哈希表key中的域field的值设为value;如果field是哈希表中的一个新建域,并且值设置成功,返回1;如果哈希表中域field已经存在且旧值已被新值覆盖,返回0. <?php ...

  7. vim 录制宏,自动循环执行组合操作

    前言 在 vim 中录制宏的意思就是把一段操作录制下来,然后可以重复执行.打个比方,我有一个文本,一共 50000 行,我要在每一行后面加一个英文句号.这个操作如果手动做的话效率非常低.这时候我可以这 ...

  8. SDN原理 OpenFlow协议 -4

    通道 Channel 在前面的OpenFlow的内容中,我们提到了在交换层所采用的流表是控制层的Controller下发的,那么Controller是如何下发流表的呢?中间经过了哪些的流程和步骤?控制 ...

  9. python 复数的数学四则运算

    print(+3j)+(-7j)) print(+3j)-(-7j)) print(+3j)*(-7j)) print(+3j)/(-7j))

  10. 100W数据,测试索引

    两张表,结构相同,数据内容相同.唯一不同的就是是否包含索引.tf_user_index表中包含索引. 这100w数据,我造了近一天时间. mysql> select count(*) from ...