引言 flask作为python的轻量级web框架,以其“快速、简单、轻便”的特点成为测试开发人员的入门级首选。在测试领域普遍用于:

  • “接口mock(即测试提供一个api方便前端模拟)”。
  • 自动化测试平台的后端服务搭建(若对系统的性能有高要求,建议使用sanic[异步非阻塞])。

学习内容:

  • flask类库安装
  • flask的最小组成单元
    • Flask的实例化
    • (默认) route路由配置
    • 视图函数
    • Flask的启动
  • route(路由)配置
    • 路径设置
      • 无动态参数传递
      • 动态参数传递
    • 请求方法

学习网站(文档)

flask-logo.png

1.flask类库安装

【推荐使用】pipenv的方式安装flask,方便开发环境干净与快捷部署。pipenv包管理工具学习请查看《pipenv包管理工具》相关内容。

  1. # pip install flask
  2. pipenv install flask # 【推荐使用】

2.flask的最小组成单元

1.最小组成单元—结构

image.png

  1. from flask import Flask # 从flask库导入Flask
  2. app = Flask(__name__) # Flask的实例化
  3. @app.route("/") # flask必须要定义一个“主路由”,默认methods为"GET"
  4. def index(): # inidex()在flask中称为“视图函数”
  5. return "success:欢迎访问【flask的最小组成单元】" # return:字符串、dict(json)、render()、templates()等
  6. if __name__ == '__main__':
  7. # app.run() # 【默认方式】ip=127.0.0.1,port=5000
  8. app.run(host="127.0.0.1",port="9999",debug=True) # 【指定方式】建议:生产环境设置“debug=Flase”

2.init文件的封装

  1. # __init__.py文件的内容
  2. from flask import Flask
  3. from flask import request, render_template, redirect, abort, send_from_directory, jsonify, make_response
  4. app = Flask(__name__) # 实例化一个flask对象:app
  5. request = request
  6. render_template = render_template
  7. redirect = redirect
  8. abort = abort
  9. send_from_directory = send_from_directory
  10. make_response = make_response

image.png

3.常用的flask函数/方法

编号 分类 类/函数 说明
1 基础 Flask flask框架中的基础类
2 请求 request 请求:
- request.method # 获取请求方法
- request.path # 获取请求路径
- request.form[key] # 获取form中指定key的value
- request.get_data() —-> json.load(request.get_data(asci=true)【实际用红色部分】 # 获取json数据
- request.files[源文件] # 文件上传
3 响应 render_templates() 模板渲染【模板文件应存放在“项目templates文件夹中”】
- return render_templates(指定模板文件,传参) 【说明:传参为“非必填”】
redirect() 重定向
- redirect(“/“) # 重定向到“/(首页)”
- redirect(“http://www.xxx.com“) # 重定向到指定的网址【不建议跳转到https网站—>需要Ca证书配置】
- redirect(url_for(指定-视图函数)) # 重定向到“指定的视图函数”
abort() 状态码的指定
- abort(302)
- abort(500)
make_response() 构造response
- make_response().set_cookies() # 设置cookies
- make_response().delete_cookies(key) # 删除cookies

3.route路由配置

1.基本格式

格式 @app.route(path,methods=[])

  • @app.route() :用于定义配置route路由。被@app.route()装饰器修饰的函数称为“视图函数”。
  • path:指定“路由路径”
  • methods :用于指定“请求方式”,post、get、put、delete等,例如:methods=[“POSTT”,”GET”]。-

image.png

2.路径设置

route的path分为“无参数传递”和“有参数传递”,具体的如下表所示:

分类 示例
无参数 @app.route(“/list”)
有参数 不定义参数的类型
@app.route(“/list/“)

定义参数的类型
@app.route(“/list/“)

1.无参数传递

  1. # 无参数传递
  2. @app.route("/")
  3. @app.route("/list")
  4. @app.route("/list", methods=["GET"])
  5. @app.route("/list", methods=["GET", "POST"])
  6. def list(): # 无参数传递
  7. # return "success"
  8. requestMethod = request.method # 获取-请求方法
  9. if requestMethod.upper() == "GET":
  10. return "【success】 请求方法=GET"
  11. else:
  12. return "【error】 请求方法!=GET"

image.png

2.有参数传递

1.未定义参数数据类型

  1. # 有参数传递【不定义参数类型】
  2. @app.route("/list1/<name>")
  3. @app.route("/list1/<name>", methods=["GET"])
  4. @app.route("/list1/<name>", methods=["GET", "POST"])
  5. def listHaveKey(name): # 有参数传递【不定义参数类型】
  6. # return "success"
  7. requestMethod = request.method # 获取-请求方法
  8. if requestMethod.upper() == "GET":
  9. return f"welcome[get],{name}"
  10. else:
  11. return f"welcome[post],{name}"

image.png

2.定义参数数据类型

类型 说明 备注
string (接受)“不含斜杠”的文本 若请求传入的参数值,不符合“设定的参数数据类型”—->(响应)报错【404】
image.png
int (接受)正整数
float (接受)正浮点数
path (接受)“含斜杠”的文本
uuid (接受)“uuid”的文本
  1. # 有参数传递【定义参数类型】
  2. @app.route("/list2/<string:name>")
  3. @app.route("/list2/<string:name>", methods=["GET"])
  4. @app.route("/list2/<string:name>", methods=["GET", "POST"])
  5. def listHaveKeyWithType(name): # 有参数传递【不定义参数类型】
  6. # return "success"
  7. requestMethod = request.method # 获取-请求方法
  8. if requestMethod.upper() == "GET":
  9. return f"welcome[get],{name}"
  10. else:
  11. return f"welcome[post],{name}"

image.png