一、介绍
flask是使用python语言编写的一个轻量级的web框架,能方便的实现接口自动化测试;有时候测试需要第三方接口,但第三方接口没有提供时,我们可以通过mock接口模拟第三方接口。
二、安装
flask的安装简单通过python提供的包安装工具pip就正常安装
命令窗口: pip install flask
三、核心模块介绍
flask.Flask:Flask可以构建分装完成的wsgi应用
flask.Flask.route(path):Flask应用中的路由配置,主要由加载在视图操作函数上完成path路径和视图函数之间的路由映射关系
flask.Flask.run():通过run()函数将web应用部署到web服务器并启动服务
四、项目搭建
pycharm的专业版有flask项目创建,但是免费的社区版需要手动创建并配置目录。
第一步:File -> Create project,名字随意: testFlask
第二步:导入 Flask 库;File-》default Setting-》Project interpreter
第三步:配项目文件;跟目录创建名为 static 的python package;static文件夹是存放 css、image、js等静态文件资源。
第四步:创建 templates文件夹,存放HTML文件
至此,基本配置完;写点代码运行起来:
首先:在 templates 里面创建一个 index.html 文件 ;写个hello world!
<!DOCTYPE html>
<html lang="en">
<body>
<h1>hello world!</h1>
</body>
</html>
然后:在工程根目录创建app.py文件
app.py的代码:
from flask import Flask,render_template
from flask import jsonify
#指定templates的路径,因为templates 和 app.py文件不在同一目录;所以要指定
app = Flask(__name__,template_folder = '../templates')
#静态路由:构建url与函数的映射关系;
@app.route("/")
def index():
# return render_template('index.html')
# return 'hi hello world!'
#返回json数据,需要提前导入jsonify模块
return jsonify({'code':200,'messages':'success!'})
users_info = {'1001':['123456','zhangsan'],'1002':['123456','lisi']}
@app.route('/users',methods=['GET'])
def users():
return users
#动态路由,可以传入不同数据;methods可以不写,默认是GET方法,users带参数;构建url与函数的映射关系;
@app.route('/users/<string:account>',methods=['GET'])
def get_user(account):
if account in users_info:
info = users_info[account]
return f'你好 {info} !'
else:
return '用户不存在!'
#动态路由,构建url与函数的映射关系;
if __name__ == '__main__':
#用默认的方式运行
app.run(debug=True)
#以调试模式启动项目
#app.run(host='0.0.0.0’,port=5000,debug=True)
#host='0.0.0.0’,表示可以使用127.0.0.1、1ocahost、ip地址访问接口
五、获取请求数据
导入request 模块,注意:是flask 的request模块,不是requests模块。
from flask import request
常用方法:
method:获取客户端提交请求的方法;
header:获取请求头
cookies:获取cookies
args: 获取GET请求的数据
form:获取POST请求的数据
values:获取POST请求提交的数据
六、服务端回话保持
使用 cookies 或session保持会话。
cookie:使用make_response模块,
创建response对象:resp = make_response()
设置cookie: resp.set_cookie(key,value,max_age) 通过键值对传参,及设置生命周期
获取cookie:request.cookies.get(key)
删除cookie:request.delete_cookie(key)
session:使用 session 模块
设置秘钥:secret_key
设置session : session[key] = value
获取session :session.get(key)
删除session :session.pop(key)
from flask import Flask,render_template
from flask import make_response
from flask import jsonify
from flask import session
from flask import request
#指定templates的路径,因为templates 和 app.py文件不在同一目录;所以要指定
app = Flask(__name__,template_folder = '../templates')
#设置秘钥,用于session信息加密
app.secret_key='123'
#静态路由:构建url与函数的映射关系;
@app.route("/")
def index():
# return render_template('index.html')
# return 'hi hello world!'
#返回json数据,需要提前导入jsonify模块
return jsonify({'code':200,'messages':'success!'})
users_info = {'1001':['123456','zhangsan'],'1002':['123456','lisi']}
@app.route('/users',methods=['GET'])
def users():
return users
#动态路由,可以传入不同数据;methods可以不写,默认是GET方法,users带参数;构建url与函数的映射关系;
@app.route('/users/<string:account>',methods=['GET'])
def get_user(account):
if account in users_info:
info = users_info[account]
return f'你好 {info} !'
else:
return '用户不存在!'
#动态路由,构建url与函数的映射关系;不需要传参数,可以通过args方法获取
@app.route('/login2',methods=['GET'])
def login2():
#获取客户端请求过来的login2接口的account参数
account = request.args.get('account')
if account in users_info:
#登陆成功,用cookie、或session保存信息
resp = make_response()
#设置 user的cookie信息
resp.set_cookie('user',account,max_age=100)
#保存session信息;
session['acc'] = account
return jsonify({'code': 200, 'messages': 'success!'})
else:
return jsonify({'code': 2222, 'messages': 'can not find user!'})
#获取用户信息,获取前先登录,校验cookie是否存在
@app.route('/getuser',methods=['GET'])
@def getuser():
#获取user的用户信息
userCookie = request.cookies.get('user')
userSession = session.get('acc')
if userCookie:
#成功获取user信息
return jsonify({'code': 200, 'messages': 'success!'})
else:
return jsonify({'code': 2222, 'messages': 'can not find user!'})
if __name__ == '__main__':
app.run(debug=True)