1、cookie.py

1"""
2- 解释: 用来保持服务器和浏览器交互的状态的, 由服务器设置,存储在浏览器
3
4- 作用: 用来做广告推送
5- cookie的设置和获取
6 - 设置cookie: response.set_cookie(key,value,max_age)
7 - max_age: 表示cookie在浏览器的存储时间,单位是秒
8 - 获取cookie: request.cookies.get("key")
9
10"""
11from flask import Flask, make_response, request
12
13app = Flask(__name__)
14
15#设置cookie
16@app.route('/set_cookie')
17def set_cookie():
18
19 #调用make_response方法获取响应体对象
20 response = make_response("set cookie")
21
22 #设置cookie
23 response.set_cookie("computer","lenovo")
24 response.set_cookie("age","13",10)
25
26 return response
27
28
29#获取cookie
30@app.route('/get_cookie')
31def get_cookie():
32
33 #获取cookie
34 name = request.cookies.get("computer")
35 age = request.cookies.get("age")
36
37 #返回
38 return "name is %s, age is %s"%(name,age)
39
40if __name__ == '__main__':
41 app.run(debug=True)


2、session.py

1"""
22_session[理解]
3
4- 解释: 服务器和用户来做状态保持的,里面存储的是敏感信息(比如身份证,登陆信息),由服务器设置,并存储在服务器
5- 作用: 用来做用户的登陆状态保持
6- session的设置和获取
7 - 设置session: sessioin[key] = value
8 - 获取session: value = session.get(key)
9
10"""
11from flask import Flask, session
12
13app = Flask(__name__)
14
15#设置SECRET_KEY
16app.config["SECRET_KEY"] = "fjdkfhkdfjkdjf"
17
18#设置session
19@app.route('/set_session/<path:name>')
20def set_session(name):
21
22 session["name"] = name
23
24 return "set session!"
25
26
27#获取session
28@app.route('/get_session')
29def get_session():
30
31 value = session.get("name")
32
33 return "set session, name is %s"%value
34
35
36if __name__ == '__main__':
37 app.run(debug=True)


3、context.py

1"""
23_上下文[了解]
3
4- 解释: 就是一个容器
5- 请求上下文
6 - request: 封装的是请求相关的数据
7 - session: 封装的是和用户相关的敏感信息
8- 应用上下文(在项目中具体应用)
9 - current_app: 是app的一个代理对象,可以通过他获取app身上设置的各种属性,主要用在模块化开发中
10 - g: 一个局部的全局变量,主要用在装饰器中
11
12"""
13from flask import Flask, current_app
14
15app = Flask(__name__)
16
17@app.route('/')
18def hello_world():
19
20 print(app.config.get("DEBUG"))
21 print(current_app.config.get("DEBUG"))
22
23 return "helloworld"
24
25if __name__ == '__main__':
26 app.run(debug=True)


4、flask_script.py

1"""
24_Flask_script[掌握]
3
4- 解释: 属于flaks的扩展
5- 作用: 用来动态运行程序,配合flask_migrate做数据库迁移
6- 使用格式:
7 - 1.安装
8 - pip install flask_script
9 - 2.导入Manager类
10 - 3.创建对象manager,管理app
11 - 4.使用manager启动程序
12 - 启动命令: python xxx.py runserver -h(host是IP地址) -p(端口号) -d(调试模式)
13
14"""
15from flask import Flask
16from flask_script import Manager
17
18app = Flask(__name__)
19app.config["DEBUG"] = True
20
21#3.创建对象manager,管理app
22manager = Manager(app)
23
24@app.route('/')
25def hello_world():
26
27 return "helloworld"
28
29if __name__ == '__main__':
30 manager.run()


5、render_template.py

1"""
25_render_template[掌握]
3
4- 解释: 属于jinja2的模板函数
5- 好处:
6 - 1.以后的视图函数,只负责业务逻辑的处理,比如: 数据库的增删改查
7 - 2.以后数据的展示,全部都有jinja2的模板负责
8- 使用格式:
9 - response = render_template('模板文件')
10
11"""
12from flask import Flask,render_template
13
14app = Flask(__name__)
15
16@app.route('/')
17def hello_world():
18
19 response = render_template('file01template.html')
20
21 return response
22
23if __name__ == '__main__':
24 app.run(debug=True)


template.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 <style>
7 .box{
8 width: 300px;
9 height: 300px;
10 background: red;
11 }
12
13 </style>
14</head>
15<body>
16
17 <div class="box">
18
19 </div>
20
21</body>
22</html>


6、variable.py

1"""
26_模板语法,获取变量[理解]
3
4- 解释: 在模板中获取视图函数的变量
5- 格式:
6 - {{ 变量 }}
7
8注意点:
91.如果发现程序被占用端口
102.杀死端口, lsof -i:5000 然后kill 进程
11
12"""
13from flask import Flask,render_template
14
15app = Flask(__name__)
16
17@app.route('/')
18def hello_world():
19
20 #1.定义各种类型的变量
21 number = 10
22 str = "老王"
23 tuple = (1,2,3,4,5)
24 list = [6,7,8,9,10]
25 dict = {
26 "name":"班长",
27 "age":29
28 }
29
30 #2.携带变量到模板中展示
31 return render_template("file02variable.html",number=number,str=str,tuple=tuple,list=list,dict=dict)
32
33if __name__ == '__main__':
34 app.run(debug=True)


variable.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 <h1>1.获取各种变量的值</h1>
10 <h2>整数: {{number}}</h2>
11 <h2>字符串: {{str}}</h2>
12 <h2>元祖: {{tuple}},分开获取: {{tuple[0]}}, {{ tuple.1 }}</h2>
13 <h2>列表: {{list}},分开获取: {{ list.0 }}, {{ list.1 }}</h2>
14 {# 如果字典使用方括号,获取,需要写成字符串,如果不是字符串,那么则会被当成变量对待 #}
15 <h2>字典: {{dict}}, 分开获取: {{ dict.name }}, {{ dict["age"] }}</h2>
16
17</body>
18</html>


7、otherprogrammer.py

1from flask import Flask,render_template
2
3app = Flask(__name__)
4
5@app.route('/')
6def hello_world():
7
8 #1.定义各种类型的变量
9 number = 10
10 str = "老王"
11 tuple = (1,2,3,4,5)
12 list = [6,7,8,9,10]
13 dict = {
14 "name":"班长",
15 "age":29
16 }
17
18 #2.携带变量到模板中展示
19 return render_template("file03other_programer.html",number=number,str=str,tuple=tuple,list=list,dict=dict)
20
21if __name__ == '__main__':
22 app.run(debug=True)


other_programer.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 <style>
7 h1{
8 color:red;
9 }
10
11 </style>
12</head>
13<body>
14
15 <h1>1.遍历元祖中的偶数</h1>
16 {% for item in tuple %}
17 {% if item %2 == 0 %}
18 <h3>{{ item }}</h3>
19 {% endif %}
20 {% endfor %}
21
22
23 <h1>2.遍历字典</h1>
24 {% for key in dict %}
25 {# dict.key那么这个key会当成字典中的一个键, dict[key],那么这个key当成一个变量 #}
26 <h3>{{ key }} = {{ dict[key] }}</h3>
27 {% endfor %}
28
29
30</body>
31</html>


8、srting_filter.py

1from flask import Flask,render_template
2
3app = Flask(__name__)
4
5@app.route('/')
6def hello_world():
7
8 return render_template("file04stringfilter.html")
9
10if __name__ == '__main__':
11 app.run(debug=True)


stringfilter.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 {# 使用格式:{{ 字符串 | 字符串过滤器 }}#}
10 1.safe:禁用转义,让标签生效
11 <p>{{ '<em>hello</em>' | safe }}</p>
12
13 2.capitalize:把变量值的首字母转成大写,其余字母转小写
14 <p>{{ 'hello PYTHON' | capitalize }}</p>
15
16 3.lower:把值转成小写
17 <p>{{ 'HELLO PYthON' | lower }}</p>
18
19 4.upper:把值转成大写,中文没有大小写
20 <p>{{ 'hello python 你好' | upper }}</p>
21
22 5.title:把值中的每个单词的首字母都转成大写
23 <p>{{ 'hello world python java' | title }}</p>
24
25 6.reverse:字符串反转
26 <p>{{ 'olleh' | reverse }}</p>
27 <p>{{ '我爱你' | reverse }}</p>
28
29
30 7.format:格式化输出
31 <p>{{ '%s is %d' | format('age',17) }}</p>
32
33 8.striptags:渲染之前把值中所有的HTML标签都删掉
34 <p>{{ '<em>hello</em>' | striptags }}</p>
35
36</body>
37</html>


9、list_filter.py

1from flask import Flask,render_template
2
3app = Flask(__name__)
4
5@app.route('/')
6def hello_world():
7
8 return render_template("file05list_fliter.html")
9
10if __name__ == '__main__':
11 app.run(debug=True)


list_filter.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8 {# * 使用格式:{{ 列表 | 列表过滤器 }}#}
9
10 1.first:取第一个元素
11 <p>{{ [1,2,3,4,5,6] | first }}</p>
12
13 2. last:取最后一个元素
14 <p>{{ [1,2,3,4,5,6] | last }}</p>
15
16 3. length:获取列表长度
17 <p>{{ [1,2,3,4,5,6] | length }}</p>
18
19 4.sum:列表求和
20 <p>{{ [1,2,3] | sum }}</p>
21
22 5.sort:列表排序,默认升序
23 <p>{{ [6,2,3,1,5,4] | sort }}</p>
24
25
26 6.过滤器的链式调用
27 {# 过滤器的链式调用 #}
28 {{ "hello" | upper | reverse }}
29
30</body>
31</html>


10、custom_filter.py

1"""
210_自定义过滤器[掌握]
3
4- 解释: 当系统提供的过滤器满足不了需求的时候,需要自定义
5- 自定义过滤器有两种格式:
6 - 1.先定义好函数,再将函数添加到系统默认的过滤器列表中
7 - def 函数名: pass
8 - app.add_template_filter(函数名,'过滤器名字')
9 - 2.定义函数的时候,直接使用系统过滤器进行装饰
10 @app.template_filter('过滤器名字')
11 def 函数名():
12 pass
13 - 案例:
14 - 1.获取列表偶数和
15 - 2.反转列表
16
17"""
18from flask import Flask,render_template
19
20app = Flask(__name__)
21
22# 1.先定义好函数,再将函数添加到系统默认的过滤器列表中
23def get_oushu(list):
24 print(list)
25 sum = 0
26 for i in list:
27 if i %2 == 0:
28 sum += i
29
30 return sum
31#参数1: 关联的函数名称, 参数2: 在模板中使用的过滤器名字
32app.add_template_filter(get_oushu,"oushu")
33
34
35# 2.定义函数的时候,直接使用系统过滤器进行装饰
36@app.template_filter("reverse")
37def listreverse(list):
38 list.reverse()
39 return list
40
41
42
43@app.route('/')
44def hello_world():
45
46 return render_template("file06custom_filter.html")
47
48if __name__ == '__main__':
49 app.run(debug=True)


custom_filter.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 <h2>原列表: {{ [1,2,3,4,5,6] }}</h2>
10 <h2>偶数列表: {{ [1,2,3,4,5,6] | oushu }}</h2>
11 <h2>反转列表: {{ [1,2,3,4,5,6] | reverse }}</h2>
12 <h2>降序列表: {{ [1,2,3,4,5,6,10,9,7] | sort | reverse }}</h2>
13
14</body>
15</html>


11、macro.py

1"""
211_代码复用之宏[了解]
3
4- 解释: 相当于python中的函数,定义好一段功能,在需要的时候进行调用即可
5
6"""
7from flask import Flask,render_template
8
9app = Flask(__name__)
10
11@app.route('/')
12def hello_world():
13
14 return render_template("file07macro.html")
15
16if __name__ == '__main__':
17 app.run(debug=True)

​macro.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 {# 定义宏 #}
10 {% macro my_macro(name,password) %}
11 用户名: <input type="text" value="{{ name }}"><br>
12 密码: <input type="password" value="{{ password }}"><br>
13 {% endmacro %}
14
15 {# 调用当前文件宏 #}
16 {{ my_macro("zhangsan","111111") }}
17
18
19 {# 使用其他文件的宏 #}
20 {% import 'file08othermacro.html' as other %}
21 {{ other.my_input() }}
22 {{ other.my_div() }}
23
24
25</body>
26</html>


othermacro.html

1{% macro my_macro(name,password) %}
2 用户名: <input type="text" value="{{ name }}"><br>
3 密码: <input type="password" value="{{ password }}"><br>
4{% endmacro %}
5
6
7{% macro my_input() %}
8
9 <h1>这是一个其他文件的宏</h1>
10
11{% endmacro %}
12
13
14{% macro my_div() %}
15
16 <div style="color: red;">我是一个孤独的div</div>
17
18{% endmacro %}


12、extends.py

1"""
212_代码复用之继承[掌握]
3
4- 解释: 一个子模板继承自父模板
5- 作用: 共性抽取,代码复用
6- 父模板
7 - 1.所有子类都具有的相同的内容的, 在父模板中直接写死
8 - 2.每个子类的模板中不一样的内容,使用block模板定义好
9- 子模板
10 - 1.根据子类自己的需求,去重写父类中的block对应的内容
11 - 2.如果重写之后,还想保留父类的内容,那么使用{{super()}}
12 - 3.继承格式: {% extends '父文件名'%}, 写在页面的顶部
13
14"""
15from flask import Flask,render_template
16
17app = Flask(__name__)
18
19@app.route('/')
20def hello_world():
21
22 # return render_template("file09zi.html")
23 return render_template("file10zi.html")
24
25if __name__ == '__main__':
26 app.run(debug=True)

file09zi.html

1{% extends 'file11fu.html' %}
2
3{# 重写正文部分 #}
4{% block contentBlock %}
5 <p>
6 床前一锅汤,<br>
7 撒了一裤裆, <br>
8 抬头拿抹布, <br>
9 低头擦裤裆 <br>
10 </p>
11{% endblock %}
12
13
14{#<!DOCTYPE html>#}
15{#<html lang="en">#}
16{#<head>#}
17{# <meta charset="UTF-8">#}
18{# <title>Title</title>#}
19{#</head>#}
20{#<body>#}
21{##}
22{# <h1>静夜思</h1>#}
23{##}
24{# <p>#}
25{# 床前一锅汤,<br>#}
26{# 撒了一裤裆, <br>#}
27{# 抬头拿抹布, <br>#}
28{# 低头擦裤裆 <br>#}
29{# </p>#}
30{##}
31{# <div>#}
32{# <a href="#">点我有惊喜</a>#}
33{# </div>#}
34{##}
35{##}
36{#</body>#}
37{#</html>#}

file10zi.html

1{% extends 'file11fu.html' %}
2
3{# 重写父类titleBlock内容 #}
4{% block titleBlock %}
5 {{ super() }}
6 <h1>新静夜思</h1>
7{% endblock %}
8
9{# 重写父类中的contentBlock内容 #}
10{% block contentBlock %}
11 <p>
12 床前明月光,<br>
13 疑似地上霜, <br>
14 举头望明月, <br>
15 低头思故乡 <br>
16 </p>
17{% endblock %}
18
19{#<!DOCTYPE html>#}
20{#<html lang="en">#}
21{#<head>#}
22{# <meta charset="UTF-8">#}
23{# <title>Title</title>#}
24{#</head>#}
25{#<body>#}
26{##}
27{# <h1>静夜思</h1>#}
28{##}
29{# <p>#}
30{# 床前明月光,<br>#}
31{# 疑似地上霜, <br>#}
32{# 举头望明月, <br>#}
33{# 低头思故乡 <br>#}
34{# </p>#}
35{##}
36{# <div>#}
37{# <a href="#">点我有惊喜</a>#}
38{# </div>#}
39{##}
40{##}
41{#</body>#}
42{#</html>#}

file11fu.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 {# 头部部分 #}
10 {% block titleBlock %}
11 <h1>静夜思</h1>
12 {% endblock %}
13
14 {# 正文部分 #}
15 {% block contentBlock %}
16
17 {% endblock %}
18
19
20 {# 底部部分 #}
21 <div>
22 <a href="#">点我有惊喜</a>
23 </div>
24
25</body>
26</html>


13.practice.py

1"""
2给定如下5条数据,只显示4行数据,背景颜色依次为:黄,绿,红,紫
3my_list = [
4 {
5 "id": 1,
6 "value": "我爱工作"
7 },
8 {
9 "id": 2,
10 "value": "工作使人快乐"
11 },
12 {
13 "id": 3,
14 "value": "沉迷于工作无法自拔"
15 },
16 {
17 "id": 4,
18 "value": "日渐消瘦"
19 },
20 {
21 "id": 5,
22 "value": "以梦为马,越骑越傻"
23 }
24]
25"""
26from flask import Flask, render_template
27
28app = Flask(__name__)
29
30@app.route('/')
31def hello_world():
32
33 #1.定义5条数据
34 my_list = [
35 {
36 "id": 1,
37 "value": "我爱工作"
38 },
39 {
40 "id": 2,
41 "value": "工作使人快乐"
42 },
43 {
44 "id": 3,
45 "value": "沉迷于工作无法自拔"
46 },
47 {
48 "id": 4,
49 "value": "日渐消瘦"
50 },
51 {
52 "id": 5,
53 "value": "以梦为马,越骑越傻"
54 }
55 ]
56
57 #2.在模板中显示4条
58 return render_template("file13practice.html",list=my_list)
59
60if __name__ == '__main__':
61 app.run(debug=True)

file13practice.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 <ul>
10 {# 如果dict.id 不等于5才遍历 #}
11 {% for dict in list if dict.id !=5 %}
12
13 {# 方式一 #}
14{# {% if dict.id == 1 %}#}
15{# <li style="background: yellow;"> {{ dict.value }} </li>#}
16{# {% elif dict.id == 2 %}#}
17{# <li style="background: green;"> {{ dict.value }} </li>#}
18{# {% elif dict.id == 3 %}#}
19{# <li style="background: red;"> {{ dict.value }} </li>#}
20{# {% else %}#}
21{# <li style="background: purple;"> {{ dict.value }} </li>#}
22{# {% endif %}#}
23
24 {# 遍历的时候可以获取到从0开始的索引 #}
25{# <h3>{{ loop.index0 }}</h3>#}
26
27 {# 遍历的时候可以获取到从1开始的索引 #}
28{# <h3>{{ loop.index }}</h3>#}
29
30
31 {# 方式二 #}
32 {% if loop.index == 1 %}
33 <li style="background: yellow;"> {{ dict.value }} </li>
34 {% elif loop.index == 2 %}
35 <li style="background: green;"> {{ dict.value }} </li>
36 {% elif loop.index == 3 %}
37 <li style="background: red;"> {{ dict.value }} </li>
38 {% else %}
39 <li style="background: purple;"> {{ dict.value }} </li>
40 {% endif %}
41
42
43
44 {% endfor %}
45 </ul>
46
47
48</body>
49</html>

14.special_variable.py

1from flask import Flask,render_template
2
3app = Flask(__name__)
4app.config["SECRET_KEY"] ="hahaha"
5@app.route('/')
6def hello_world():
7
8 return render_template("file14special_variable.html")
9
10@app.route('/test/<int:age>')
11def test(age):
12 return "test..."
13
14
15if __name__ == '__main__':
16 app.run(debug=True)

file14special_variable.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9 <h2>config变量: {{ config }}</h2>
10 <h2>request: {{ request.method }}</h2>
11 <h2>request: {{ request.url }}</h2>
12 <h2>url_for(): {{ url_for("hello_world") }}</h2>
13 <h2>url_for(): {{ url_for("test",age=100) }}</h2>
14
15</body>
16</html>

15.flash.py

1from flask import Flask,render_template,flash
2
3app = Flask(__name__)
4app.config["SECRET_KEY"] = "fdjkfjdk"
5
6@app.route('/')
7def hello_world():
8
9
10
11 return render_template("file15flash.html")
12
13@app.route('/test')
14def test():
15 #存储消息
16 flash("登陆成功")
17
18 return "test"
19
20if __name__ == '__main__':
21 app.run(debug=True)

file15flash.html

1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6</head>
7<body>
8
9
10 {{ get_flashed_messages() }}
11
12</body>
13</html>