一、简介
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架 ,在这里主要简单介绍使用flask 来mock一个服务端,方便测试在还没完成对应服务功能开发时进行mock测试
安装:
# 安装flask
pip install flask
# 验证flask
pip show flask
二、Flask简单使用
1.配置文件
2. 路由系统
1)动态路由(url传参),示例代码如下:
from flask import Flask
# 创建1个Flask实例
app = Flask(__name__)
# 设置一个动态参数name
@app.route('/')
# 视图必须有对应的接收参数name
def first_flask(name):
print(name)
return "Hello World~"
if __name__ == '__main__':
app.run(debug=True)
执行代码后,访问服务链接,路径加“yoyo”名称,效果如下:
2)指定允许的请求方法
@app.route('/login', methods=['GET', 'POST'])
3. request请求参数获取
1)post请求参数获取
request.get_data()、request.data,获取未经处理过的原始请求数据而不管内容类型,如果数据格式是json的,则取得的是json字符串;
request.get_json()、和request.json,将请求参数做了处理,得到的是字典格式的,因此排序会打乱依据字典排序规则。
客户端请求代码:
服务端代码:
from flask import Flask, request
# 创建1个Flask实例
app = Flask(__name__)
# 设置一个动态参数name
@app.route('/', methods=['GET', 'POST'])
# 视图函数
def first_flask():
# 1. request.get_data()、request.data,获取未经处理过的原始请求数据而不管内容类型,如果数据格式是json的,则取得的是json字符串
a = request.get_data()
print(a)
print(type(a))
b = request.data
print(b)
print(type(b))
# 2.request.get_json(),和request.json,将请求参数做了处理,得到的是字典格式的,因此排序会打乱依据字典排序规则
c = request.get_json()
print(c)
print(type(c))
name = request.get_json()['name']
print(f"name的值是:{name}")
d = request.json
print(d)
print(type(d))
return "Hello World~"
if __name__ == '__main__':
app.run(debug=True)
2)get请求参数获取
客户端代码:
服务端代码:
from flask import Flask, request
# 创建1个Flask实例
app = Flask(__name__)
# 设置一个动态参数name
@app.route('/', methods=['GET', 'POST'])
# 视图函数
def first_flask():
# get请求参数
# 获取到单个的值
e = request.args.get('name')
print(f'获取name的值为:{e}')
# 可以获取get请求的所有参数返回值是ImmutableMultiDict(不可变的多字典)类型
f = request.args
print(f)
# 将获得的参数转换为字典
g = request.args.to_dict()
print(g)
print(type(g))
return "Hello World~"
if __name__ == '__main__':
app.run(debug=True)
服务端打印结果:
还有一些常用方法,如:
request.headers : 获取请求头
request.method:获取方法
request.url:获取访问url地址,如 http://127.0.0.1:5000/?name=yoyo&age=17
request.cookies:获取请求cookies
三、mock登录及查询用户信息场景
服务端代码:
from flask import Flask, request, jsonify
app = Flask(__name__)
# 解决接收报文中文乱码问题
app.config['JSON_AS_ASCII'] =False
@app.route('/api/login', methods=['POST'], strict_slashes=False)
def login():
'''登录接口'''
# 调试信息,打印请求方法
print(request.method)
# 获取请求数据,将数据变为字典
data = request.get_json()
print(data)
# 定义用户名和密码变量,从data中取值
username = data['username']
pwd = data['password']
'''
测试场景设计
1)参数为空
2)用户名密码正确
3)用户名或密码错误
'''
if username == '' or pwd == '':
return jsonify({"code": "001",
"msg": "用户名或密码不能为空"})
elif username == 'yoyo' and pwd == '123456':
return jsonify({"code": "002",
"msg": "登录成功",
"info": {
"age": 18,
"name": "yoyo"},
"token": "23657DGYUSGD126731638712GE18271H"
})
else:
return jsonify(
{
"code": "001",
"msg": "用户名或密码错误"
}
)
# 查询个人用户信息接口
@app.route('/api/userinfo', methods=['GET'], strict_slashes=False)
def api_userinfo():
# 获取请求头的token
token = request.headers.get('token')
if token == "23657DGYUSGD126731638712GE18271H":
return jsonify({
"httpstatus": 200,
"data": {
"userid": 321411,
"username": "yoyo",
"userbalance": 5678.90,
"userpoints": 4215
}
})
else:
return jsonify(
{"code": "1000",
"msg": "用户信息不正确"}
)
if __name__ == '__main__':
app.run(debug=True)
说明:
1)# 路由配置中,strict_slashes=False 对URL最后的 / 符号是否严格要求
例如:@app.route('/index',strict_slashes=False) #访问 http://www.xx.com/index/ 或 http://www.xx.com/index均可
@app.route('/index',strict_slashes=True) #仅访问 http://www.xx.com/index
2) Flask 框架里,可以用 jsonify 返回 json 数据。使用 jsonify 时,返回的 http response 的 Content-Type是 application/json,这样做是符合 HTTP 协议的规定的
客户端代码及请求结果: