1、请求对象request
方法:
提取方法 | 描述 |
---|---|
request.cookies | 提取cookie字典信息 |
<转换器名称:变量名称> | 请求路径传递参数 /user_id/66 |
request.args.get(“name”) | 查询字符串参数 /user?name=curry&age=18 |
request.form.get(“name”) | 表单数据 {“name”: “james”, “age”: 38} |
request.json.get(“name”) | json格式字符串参数 |
补充:
# 5.文件参数 {"img": 图片二进制数据} [POST请求]
# 语法:request.files 字典
# # type: FileStorage 变量类型声明(可存储的文件类型)
img_file = request.files.get("img") # type: FileStorage
# 存储到本地
img_file.save('./1.png')
# 读取二进制文件数据 [七牛云存储]
# img_file.read()
2、响应对象response
from flask import Flask, make_response, Response, jsonify, redirect, url_for
import json
app = Flask(__name__, static_folder="static")
# 取消将中文转换成ascii编码的配置信息
app.config["JSON_AS_ASCII"] = False
# 需求1:返回静态文件资源作为响应对象 【flask已经实现了路由和视图函数】
# 访问静态文件的路由:127.0.0.1:8000/static/1.png
# static_url_path 访问静态文件的url前缀
# app = Flask(__name__, static_folder="static", static_url_path="/myimg")
# 访问静态文件的路由:127.0.0.1:8000/myimg/1.png
# 需求2:返回响应对象-元组 (响应体, 响应状态码, 响应头[字典]) [了解]
@app.route('/demo1')
def demo1():
# 返回多个值,python会将其包装成元祖
return "我是响应体信息", 666, {"itcast": "python"}
# 需求3:构建响应对象返回 [推荐]
@app.route('/demo2')
def demo2():
# 1.创建响应对象
response = make_response("我是响应体内容") # type: Response
# 2.自定义状态码
# 注意:状态码必须是数字
response.status_code = 201
# 3.自定义响应头
response.headers["itcast"] = "python39"
# response.set_cookie()
# 4.返回响应对象
return response
# 需求4:返回json字符串作为响应对象 [重点]
@app.route('/demo3')
def demo3():
# 1.准备数据字典
my_dict = {
"name": "帅哥",
"age": 18
}
# 2.将字典转换成json字符串,返回json字符作为响应对象
# 方案1: json模块完成
# 返回的数据是Content-Type: text/html;
# json_str = json.dumps(my_dict)
# ensure_ascii=False 取消将中文转换成ASCII编码
# indent=4 缩进
# json_str = json.dumps(my_dict, ensure_ascii=False, indent=4)
# 方案2:jsonify() 【推荐】
# 1.将字典转换成json字符串
# 2.将json字符串包装成响应对象,并且在响应头中设置了内容类型:Content-Type: application/json
json_response = jsonify(my_dict)
return json_response
# 需求:返回重定向作为响应对象
@app.route('/demo4')
def demo4():
# 1.准备url地址
url = "http://www.baidu.com"
# 2.构建重定向的响应对象
return redirect(url)
@app.route('/demo5')
def demo5():
# 1.准备url地址
# 2.构建重定向的响应对象
# 路由反转,根据视图函数名称获取路由地址
url = url_for("demo3")
return redirect(url)
if __name__ == '__main__':
app.run(debug=True, port=8000)