初入Flask

###了解Flask

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
1.使用virtualenv新建环境:virtualenv --no-site-packages flaskdb7
2. 启动项目:cd /Scripts/acticate
3.安装flask: pip install flask
4.pip install flask-script: 下载flask管理项目
导入模块: from flask-script import Manager
manage = Manage(app)
if __name__ == '__main__':
manage.run()
5.安装蓝图:pip install flask-blueprint

模块化管理路由
# 1.在视图中生成蓝图对象
blueprint = Blueprint('first', __name__)
# 2. 管理路由
@blueprint.route('/')

# 3.manage中去注册蓝图
from app.views import blueprint
app.register_blueprint(blueprint=bluepprint,url_prefix='/添加前缀')

# 无参跳转:
# redirect: 跳转
# url_for: 反向解析
# ‘first.hello’: 蓝图的第一个参数,跳转到的函数名
return redirect(url_for('first.跳转的参数名'))

# 有参跳转
return redirect(url_for('first.跳转的参数名',参数=值))


生成和删除cookie
导入模块: from flask import make_response
# make_response: 创建响应
# 第一个参数:响应内容
# 第二个参数:响应状态码
res = make_response('<h2>生成cookie</h2>', 200)
# 设置cookie, max_age以秒为单位,expires以datetime为单位
#设置cookie:响应对象res.set_cookie(key, value, max_age, expires)
res.set_cookie('token', '123456', max_age=6000)
return res

# 删除cookie
# 1. delete_cookie:响应对象res.delete_cookie(key)
# 2. set_cookie:响应对象 res.set_cookie(key, value, max_age=0)

# 请求
1.接收HTTp请求方式@appp.route('/', methods=['GET','POST','PATCH', 'PUT', 'DELETE'])
2.判断当前请求方式:request.method
# 获取值:
1. # 获取GET请求中传递的参数:request.args
# 获取GET请求中全部name参数,request.args.getlist('name')
# 获取GET请求中第一个name参数,request.args.get('name')/request.args['name']
2. # 获取POST请求中传递的参数:request.form
# 获取POST请求中全部name参数,request.form.getlist('name')
# 获取POST请求中第一个name参数,request.args.get('name')/request.args['name']
# 获取路径:request.path
# 获取文件: request.files

flask的基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

from flask import Blueprint, redirect, url_for, make_response, request, render_template, session

# 模块化管理路由
# 第一步:生成蓝图对象
from utils.functions import login_required

blueprint = Blueprint('first', __name__)


@blueprint.route('/')
def hello():
return 'hello world!'


@blueprint.route('/stu/<id>/')
def stu(id):
return 'hello stu:%s' % id

# 1.定义路由跳转到hello方法
# 2.定义路由跳转到stu方法


@blueprint.route('/redirect')
def my_redirect():
# redirect: 跳转
# url_for: 反向解析
# ‘first.hello’: 蓝图的第一个参数,跳转到的函数名
return redirect(url_for('first.hello'))


@blueprint.route('/redirect_id/')
def stu_redirect():
return redirect(url_for('first.stu', id=3))


@blueprint.route('/make_response/')
def my_response():
# make_response: 创建响应
# 第一个参数:响应内容
# 第二个参数:响应状态码
res = make_response('<h2>还行吧</h2>', 200)
# 设置cookie,max_age以秒为单位,expires以datetime为单位
res.set_cookie('token', '123456', max_age=6000)
return res


@blueprint.route('/del_cookie/')
def del_cookie():
res = make_response('<h2>删除cookie</h2>', 200)
res.delete_cookie('token')
return res


@blueprint.route('/req/', methods=['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
def req():
if request.method == 'GET':
# 获取GET请求中传递的参数:request.args
# 获取GET请求中全部name参数,request.args.getlist('name')
# 获取GET请求中第一个name参数,request.args.get('name')/request.args['name']
return 'hello'

if request.method == 'POST':
# 获取POST请求中传递的参数:request.form
# 获取POST请求中全部name参数,request.form.getlist('name')
# 获取POST请求中第一个name参数,request.args.get('name')/request.args['name']

return 'hello post!'


@blueprint.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')

if request.method == 'POST':
# 模拟登陆
username = request.form.get('username')
password = request.form.get('password')
if username == 'coco' and password == '123456':
session['user_id'] = 1
return redirect(url_for('first.index'))

# 登录校验装饰器


@blueprint.route('/index/')
@login_required
def index():
return render_template('index.html')

###在utils中的functions的装饰器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

from flask import session, redirect, url_for

# 条件
# 外层函数嵌套内层函数
# 外层函数返回内层函数
# 内层函数调用外层函数
from functools import wraps


def login_required(func):
@wraps(func)
def inner():
if 'user_id' in session:
return func()
else:
return redirect(url_for('first.login'))
return inner

###manage.py(运行flask)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

from flask import Flask
from flask_script import Manager
from app.views import blueprint

app = Flask(__name__)

# 蓝图使用第二步: 注册蓝图
app.register_blueprint(blueprint=blueprint, url_prefix='/app')

app.secret_key = '1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9ol'

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