写点什么

软件测试学习笔记丨 Flask 框架 - 请求与响应

作者:测试人
  • 2024-10-31
    北京
  • 本文字数:1490 字

    阅读完需:约 5 分钟

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23408

请求方法

from flask import Flask
app = Flask(__name__)

@app.route("/cases", methods=["get"])def get_case(): return {"code": 0, "msg": "get success"}

# post请求不能直接通过url访问,可以使用postman或者requests库操作@app.route("/case", methods=["post"])def post_case(): return {"code": 0, "msg": "post success"}

if __name__ == '__main__': app.run()
复制代码

处理请求数据

注意:是 request 对象(不是 requests)


  • json 可以处理一些 post 请求的数据

from flask import Flask, request
from log_utils import logger
app = Flask(__name__)

# get@app.route("/login/", methods=["get"])def hogwarts(): logger.info(f"请求参数为{request.args}") result = request.args a = result.get('a') b = result.get('b') print(a, b) return {"code": 0, "msg": "get success"}

# post请求的json数据@app.route("/regist", methods=["post"])def post_regist(): logger.info(f"请求参数为{request.json}") return {"code": 0, "msg": "post success"}

# form表单@app.route("/put", methods=["put"])def put_regist(): name = request.form.get('name') p = request.form.get('password') email = request.form.get('email') logger.info(f"请求参数为{request.form}") logger.info(f"name:{name},password:{p},email:{email}") return {"code": 0, "msg": "post success"}

# 文件上传@app.route("/file", methods=["post"])def post_file(): obj = request.files.get("file") logger.info(obj) filename = obj.filename logger.info(f"文件名为:{filename}") # 将接口接收的文件保存在本地 obj.save("./1.txt") return {"code": 0, "msg": "post success"}

if __name__ == '__main__': app.run()
复制代码

由于 postman 对文件上传有一些 bug,所以写了测试代码上传文件:

import requests

def test_file(): url = "http://127.0.0.1:5000/file" file = { "file": open("C:/Users/Administrator/Desktop/1.txt", 'rb') } r = requests.post(url=url, files=file) assert r.status_code == 200
复制代码

处理响应信息

  • 返回的响应类型:文本:直接 return 元组 jsonhtml 额外数据

返回元组有三种情况:

  • (response,status)

  • (response,headers)

  • (response,status,headers)

@app.route("/tuple")def tuple_result():    return "hogwarts", 200, {"test": "demo"}
复制代码

返回 json:

  • 直接返回 dict 会转换成 json

  • 使用 jsonify()方法,通过参数传入键值对

@app.route("/dict")def json_result():    return {'status': 0}

@app.route("/json")def json_re(): return jsonify({'status': 0}) # 也可以通过参数指定 # return jsonify(status=1,name="joker")
复制代码

返回 html–render_template(文件名称.html)

使用模板渲染技术

注意:html 文件必须在同级名为 templates 的目录下

@app.route("/html")def html_demo():    return render_template("demo.html")
复制代码

设置额外数据–make_response():

  • 设置 cookie

  • 设置响应头信息等

@app.route("/")def index():    # 设置返回页面模板    res = make_response(render_template('demo.html'))    # 设置cookie    res.set_cookie('username', 'password')    # 设置请求头    res.headers['hogwarts'] = 'joker'    return res
复制代码


软件测试开发免费视频教程分享


发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试学习笔记丨Flask框架-请求与响应_flask_测试人_InfoQ写作社区