引言 flask作为python的轻量级web框架,以其“快速、简单、轻便”的特点成为测试开发人员的入门级首选。在测试领域普遍用于:
- “接口mock(即测试提供一个api方便前端模拟)”。
- 自动化测试平台的后端服务搭建(若对系统的性能有高要求,建议使用sanic[异步非阻塞])。
学习内容:
- flask类库安装
- flask的最小组成单元
- Flask的实例化
- (默认) route路由配置
- 视图函数
- Flask的启动
- route(路由)配置
- 路径设置
- 无动态参数传递
- 动态参数传递
- 请求方法
学习网站(文档)
- flask官方文档
- (w3c)flask教程
- Flask学习笔记.xmind 【笔者学习总结】
1.flask类库安装
【推荐使用】pipenv的方式安装flask,方便开发环境干净与快捷部署。pipenv包管理工具学习请查看《pipenv包管理工具》相关内容。
# pip install flask
pipenv install flask # 【推荐使用】
2.flask的最小组成单元
1.最小组成单元—结构
from flask import Flask # 从flask库导入Flask
app = Flask(__name__) # Flask的实例化
@app.route("/") # flask必须要定义一个“主路由”,默认methods为"GET"
def index(): # inidex()在flask中称为“视图函数”
return "success:欢迎访问【flask的最小组成单元】" # return:字符串、dict(json)、render()、templates()等
if __name__ == '__main__':
# app.run() # 【默认方式】ip=127.0.0.1,port=5000
app.run(host="127.0.0.1",port="9999",debug=True) # 【指定方式】建议:生产环境设置“debug=Flase”
2.init文件的封装
# __init__.py文件的内容
from flask import Flask
from flask import request, render_template, redirect, abort, send_from_directory, jsonify, make_response
app = Flask(__name__) # 实例化一个flask对象:app
request = request
render_template = render_template
redirect = redirect
abort = abort
send_from_directory = send_from_directory
make_response = make_response
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”]。-
2.路径设置
route的path分为“无参数传递”和“有参数传递”,具体的如下表所示:
分类 | 示例 |
---|---|
无参数 | @app.route(“/list”) |
有参数 | 不定义参数的类型 @app.route(“/list/ 定义参数的类型 @app.route(“/list/ |
1.无参数传递
# 无参数传递
@app.route("/")
@app.route("/list")
@app.route("/list", methods=["GET"])
@app.route("/list", methods=["GET", "POST"])
def list(): # 无参数传递
# return "success"
requestMethod = request.method # 获取-请求方法
if requestMethod.upper() == "GET":
return "【success】 请求方法=GET"
else:
return "【error】 请求方法!=GET"
2.有参数传递
1.未定义参数数据类型
# 有参数传递【不定义参数类型】
@app.route("/list1/<name>")
@app.route("/list1/<name>", methods=["GET"])
@app.route("/list1/<name>", methods=["GET", "POST"])
def listHaveKey(name): # 有参数传递【不定义参数类型】
# return "success"
requestMethod = request.method # 获取-请求方法
if requestMethod.upper() == "GET":
return f"welcome[get],{name}"
else:
return f"welcome[post],{name}"
2.定义参数数据类型
类型 | 说明 | 备注 |
---|---|---|
string | (接受)“不含斜杠”的文本 | 若请求传入的参数值,不符合“设定的参数数据类型”—->(响应)报错【404】![]() |
int | (接受)正整数 | |
float | (接受)正浮点数 | |
path | (接受)“含斜杠”的文本 | |
uuid | (接受)“uuid”的文本 |
# 有参数传递【定义参数类型】
@app.route("/list2/<string:name>")
@app.route("/list2/<string:name>", methods=["GET"])
@app.route("/list2/<string:name>", methods=["GET", "POST"])
def listHaveKeyWithType(name): # 有参数传递【不定义参数类型】
# return "success"
requestMethod = request.method # 获取-请求方法
if requestMethod.upper() == "GET":
return f"welcome[get],{name}"
else:
return f"welcome[post],{name}"