Flask学习笔记
SilverFruity 12/10/2019 PythonFlask
# 使用config.py设置Flask
#config.py
DEBUG = True
#数据库相关
SECRET_KEY = "SECRET_KEY"
SQLALCHEMY = ""
1
2
3
4
5
2
3
4
5
# main.py
from flask import Flask
import config
app = Flask(__name__)
app.config.from_object(config)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# URL传参
@app.route('/article/<articleId>/')
def articleDetail(articleId: str):
return "%s" % articleId
1
2
3
2
3
# URL反转,重定向
from flask import redirect, url_for
url_for("article",articleId="132")
redirect('url')
redirect(url_for("article",articleId="132"))
1
2
3
4
2
3
4
# Jinja2
# 模版渲染和模版传参
index.html位于templates目录下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>{{ usernames }}</p>
<p>{{ username }}</p>
<p>{{ gender }}</p>
<p>{{ age }}</p>
{# 访问模型 #}
<hr>
<p>{{ person.name }}</p>
<p>{{ person.age }}</p>
{# 访问字典 #}
<hr>
<p>{{ dict['google'] }}</p>
<p>{{ dict['baidu'] }}</p>
<p>{{ dict.google }}</p>
<p>{{ dict.baidu }}</p>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# main.py
@app.route('/')
def hello_world():
class Person(object):
age = 1
name = 'Person'
p = Person()
context = {
'username': 'jkm',
'gender': 'female',
'age': '23',
'person': p,
'dict': {
"google": 'www.google.com',
'baidu': 'www.baidu.com'
}
}
return render_template('index.html', **context, usernames="test")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# if 控制语句
# main.py
@app.route('/<isLogin>/')
def hello_world(isLogin):
if int(isLogin) > 0:
user = {
'username': 'test',
'age': 18
}
return render_template('index.html', user=user)
else:
return render_template('index.html')
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if user and user.age > 20 %}
<p>username:{{ user.username }}</p>
<p>age:{{ user.age }}</p>
{% else %}
<a>登陆</a>
<a>注册</a>
{% endif %}
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# for循环语句
# 字典遍历
items(),keys(),values()等都可以使用
@app.route('/')
def hello_world():
user = {
'username': 'test',
'age': 21
}
return render_template('index.html', user=user)
1
2
3
4
5
6
7
2
3
4
5
6
7
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for k, v in user.items() %}
<p>{{ k }}: {{ v }}</p>
{% endfor %}
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 数组遍历
@app.route('/')
def hello_world():
sites = ["https://wwww.baidu.com", "https://wwww.google.com"]
return render_template('index.html', sites=sites)
1
2
3
4
2
3
4
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for value in sites %}
<a>{{ value }}</a>
{% endfor %}
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 过滤器
介绍和语法:
- 过滤器可以处理变量,把原始的变量经过处理后再展示出来,作用的对象是变量,类似于Linux Shell的管道处理 ls -a | grep name.txt,常用过滤器有default设置默认值,length等
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ avatar | default "url" }} </body> </html>
1
2
3
4
5
6
7
8
9
10
# 模版继承
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block container %} {% endblock %}
</body>
</html>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
index.html
{% extends 'base.html' %}
{% block container %}
<p>index_page</p>
{% endblock %}
1
2
3
4
2
3
4
second.html
{% extends 'base.html' %}
{% block container %}
<p>second_page</p>
{% endblock %}
1
2
3
4
2
3
4
# 加载静态文件css,png等
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{{ url_for('static',filename='text.css') }}">
</head>
<body>
<img src="{{ url_for('static',filename='images/icon.png') }}" alt="">
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11