持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
10.响应
10.1 跳转模板
上面我们的返回值都是数据直接展示,也可以跳转到模板中
使用 render_template 跳转模板
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
在templates(默认模板目录,可以通过参数配置)目录下新建index.html
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>
10.2 重定向
将请求重定向到其他接口
使用 redirect 重定向
from flask import Flask, redirect
app = Flask(__name__)
@app.route("/redirect")
def redirect_baidu():
return redirect("https://www.baidu.com")
在访问http://127.0.0.1:5000/redirect时会重定向到 www.baidu.com/
10.3 返回json数据
在正常的前后端联调时,json格式的数据是共同的标准.
flask提供jsonify来对响应数据进行包装,返回给前端json数据
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/json")
def get_json():
json_dict = {
'name': 'zhangsan',
'age': 18
}
return jsonify(json_dict)
jsonify与上文我们测试的json.dumps()的区别:
json.dumps只是将python对象转换json对象字符串,响应头中并没有设置application/json,浏览器并无法把响应数据解析为json格式,前端需要手动处理,将字符串再次转换为json格式
而jsonify除了将对象转换为json格式外, 还在响应头中设置application/json, 这样前端可以直接使用.
10.4 响应头
flask也可以对响应头进行设置
有两种方式设置:
10.4.1 直接返回
视图中return 可以返回多个参数, 第一个参数为返回的数据, 第二个参数为响应码, 第三个参数为headers
from flask import Flask
app = Flask(__name__)
@app.route("/response")
def get_response():
return "状态码", 700, {"test": "test"}
headers可以使用字典,也可以使用列表+元组的方式
效果:
10.4.2 构造make_response
flask也提供了mask_response来构造response
from flask import Flask, make_response
app = Flask(__name__)
@app.route("/response")
def get_response():
resp = make_response("make_response")
resp.status = '404 NOT FOUND'
resp.headers["test"] = "make_response"
return resp
注: status状态码需要是完整的描述 比如: 200 ok; 404 Not Found;
效果:
10.4.3 Cookie
cookie只能通过make_response的方式进行设置
其实本质上就是将cookie设置到响应头里,响应头里有个set-cookie的header,浏览器收到这个header后就会将header的cookie存储在浏览器端,在下次发起该域的请求时携带该cookie
from flask import Flask, make_response
app = Flask(__name__)
@app.route("/set_cookie")
def set_cookie():
resp = make_response("set-cookie")
resp.set_cookie("test-cookie", "cookie")
return resp
效果:
同样,有设置cookie,就有获取cookie,删除cookie
获取cookie无需多说,通过request对象可以获取cookie的值
删除cookie需要调用make_response对象的删除cookie的方法, 删除cookie的原理其实还是set-cookie,只不过将该cookie的有效期设置到1970年,这样该cookie就会自动过期
from flask import Flask, make_response, request
app = Flask(__name__)
@app.route("/set_cookie")
def set_cookie():
resp = make_response("set-cookie")
resp.set_cookie("test-cookie", "cookie")
return resp
@app.route("/get_cookie")
def get_cookie():
return request.cookies.get("test-cookie")
@app.route("/delete_cookie")
def delete_cookie():
resp = make_response("test-delete-cookie")
resp.delete_cookie("test-cookie")
return resp
效果:
获取cookie
删除cookie:
再次查看cookie
cookie已经被删除,返回None报错.
10.4.5 Session
flask的session是存储在浏览器端的,像cookie一样
注: session的使用必须配置SECRET_KEY,没有此参数session无法设置
from flask import Flask, session
app = Flask(__name__)
app.secret_key = "123"
@app.route("/create_session")
def create_session():
session["test-session"] = "test=session"
return "test-session"
@app.route("/get_session")
def get_session():
return session.get("test-session")
效果:
可以看到session其实是像cookie一样保存在浏览器端了, 而secret_key的作用就是对session进行加密,防止泄露敏感信息
get_session效果: