Python 测开28期 - TLF - 学习笔记 - 测试平台开发 - 处理请求和响应

友情提示:
1、本文基于Flask环境进行处理
2、关于Flask环境搭建,可以参考 Python 测开27期 - TLF - 学习笔记 - 测试平台开发 - Flask安装及路由定义

一、处理请求数据

image

1、get 请求处理,通过 request.args 获取请求参数

# 处理 get 请求, 通过 request.args 获取请求参数(返回值为类似于字典形式)
@app.route("/",  methods = ['get'])
def get_process():
    info = request.args    # 获取请求参数
    name = info.get('name')  # 获取指定参数的值
    age = info.get('age')  # 获取指定参数的值
    print(f"请求信息为:{info},name={name}, age={age}")
    return {"code":0,"msg":"get success"}

运行效果为:
image
控制台输出信息为:

2、post 请求处理,通过 request.json 获取请求参数(请求参数为JSON格式,返回值为字典形式)

# 处理 post 请求, 通过 request.json 获取请求参数
@app.route("/", methods = ['post'])
def post_process():
    info = request.json   # 获取请求参数
    name = info.get("name")   # 获取特定参数的取值
    age = info.get("age")    # 获取特定参数的取值
    print(f"请求信息为:{info},name = {name}, age = {age} ")
    return {"code": 0, "msg": "post success"}

可以借助 postman 发送请求并查看返回结果


控制台输出信息为:
image

3、表单信息处理(例如:登录、注册),通过 request.form 获取表单信息

# 处理 put 请求, 通过 request.form 获取请求参数
@app.route("/", methods = ["put"])
def put_process():
    info = request.form   # 获取表单数据
    name = info.get("name")
    password = info.get("password")
    password_confirm = info.get("password_confirm")
    email = info.get("email")
    print(f"表单信息为:{info}, name = {name}, password = {password}, password_confirm = {password_confirm}, email = {email}")
    return {"code":0, "msg":"put message, 注册信息处理"}

可以借助 postman 发送请求并查看返回结果


控制台输入信息为:

4、文件请求处理,通过 request.file 获取文件信息

  • request.files.get(‘file’) 获取文件对象
  • filename 获取文件对象的文件名
  • save() 方法保存文件到指定路径下
# 客户端上传文件代码
import requests

# 上传文件到指定网址
def upload_file():
    url = "http://127.0.0.1:5000/file/"
    file = {"file":open(r"D:\CCPC2023.jpg","rb")}   # tlf:注意,此处务必在字符串(路径)前加 r,以防 \ 转义
    r = requests.post(url,files = file)
    print(r.status_code)    # 输出响应码
    print(r.text)   # 输出响应信息

upload_file()  # tlf:注意,别忘了调用函数才能执行哦

# 服务器端获取文件信息代码
# 处理 post 请求,发送的信息为文件
@app.route("/file/", methods = ['post'])
def post_file_process():
    file = request.files.get("file")    # 创建文件对象,保存传入的file信息
    print(f"文件名为:{file.filename}") # 获取文件名称并打印输出
    file.save(r"D:\CCPC1.jpg")         # tlf:注意,此处务必在字符串(路径)前加 r,以防 \ 转义
    return {"code":0, "msg":"file message"}

二、返回响应数据

响应数据类型包括:

  • 文本型
  • 元组
  • JSON
  • html
  • 额外数据(eg:Cookie、头信息等)

1、文本型

# 返回类型为文本
@app.route("/text/")
def response_text():
    return "响应信息为文本类型"

2、元组

元组的表现形式有三种:

  • (response, status)
  • (response, headers)
  • (response, status, headers)
    其中,response-响应内容,字符串形式;status-状态码,整数形式;headers-响应头,字典形式
#返回类型为元组(此处,返回的元组类型为第三种)
@app.route("/tuple/")
def response_tuple():
    return "黄淮学院",200,{"name":"tlf"}    # 响应内容含响应体、状态码和响应头

3、JSON

# 返回类型为 JSON 格式
@app.route("/json/")
def response_json():
    # 第一种方法:以 字典 形式设定返回数据,系统自动转换为 JSON 格式
    # return {"name":"tlf", "age":18, "sex":"female"}
    # 第二种方法:通过 flask 提供的 jsonify() 方法进行返回,此处参数为 字典 形式
    # return jsonify({"name":"tlf", "age":20, "sex":"female"})
    # 第三种方法:通过 flask 提供的 jsonify() 方法进行返回,此处参数为 key-value 形式,会被转换为 JSON 格式
    return jsonify(name="tlf",age=19,sex="female")

4、html

在当前包下,创建一个templates文件夹,将html模板存放在该文件夹下
类似于:
image
以下为需要返回的html模板的具体内容:

<html>
    <body>
        <h1>黄淮学院</h1>
    </body>
</html>

定义方法处理响应,返回html文件

# 返回类型为 html(通过调用 render_template() 方法将设置好的 html 模板进行返回)
@app.route("/html/")
def response_html():
    # 返回提前设定好的模板,该模板需要存储在当前包下的 templates 文件夹下(名称必须是templates)
    return render_template("demo.html")

5、额外数据

# 返回其他额外信息
# 注意:此处需要套用到事先准备好的html模板
@app.route("/extra/")
def response_extra():
    extra = make_response(render_template("demo.html"))  # 调用make_response()方法构造响应实例
    extra.set_cookie("name","tlf_hhxy")  # 设置响应信息的cookie
    extra.headers["university"] = "hhxy"  # 设置响应信息的头,注意写法
    return extra

运行效果为:(可以通过F12查看请求和响应等信息)