day7_用flask进行mock接口开发

mock接口顾名思义就是模拟接口的意思,模拟第三方数据交互的接口,当第三方的接口没有提供之前,我们自己写mock接口和自己的系统数据对接测试,如果不想让别人连接数据库,可以mock接口,让别人调这个接口看数据

import flask
import json
server = flask.Flask(__name__)
@server.route('/api/login') # 函数名可以写别的名字也可以,访问要按照路径来
def login():
d = {'error_code': 0, 'msg': '登录成功'}
return json.dumps(d, ensure_ascii=False)


server.run(host='0.0.0.0', port=8000, debug=True) # run只能写一次,如果run上面还有接口,把run写在所有接口的下面,具体参数介绍看最下面
tools.py里的代码如下:
import pymysql
import hashlib


def con_mysql(sql, many=True):
conn = pymysql.connect(host='118.24.3.40', user='jxz', password='123456', db='jxz', charset='utf8')
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute(sql)
if many:
res = cur.fetchall()
else:
res = cur.fetchone()
cur.close()
conn.close()
return res


def md5_passwd(s, salt=''):
s = str(s) + salt
md = hashlib.md5(s.encode())
# md.update(s.encode())
res = md.hexdigest()
return res

接口开发.py里的代码如下:
import flask
import json
from tools import con_mysql
server = flask.Flask(__name__) # 把这个python文件当作一个web服务,server可以改成别的名字


@server.route('/api/login', methods=['post', 'get']) # route里面第一个参数是路径名,第二个参数是请求类型,必须用list这种方式,methods默认不写就是get请求
def login(): # @server.route和函数名必须紧挨着,就把下面的函数封装成一个接口,要不然就是普通函数
# print(flask.request.values) # 打印出CombinedMultiDict([ImmutableMultiDict([('username', 'ssj'), ('password', '123')]))
print(flask.request.json) # 刷新url或调用postman打印出{'username': 'sj', 'password': '123'}
username = flask.request.values.get('username') # 字典格式用get取值
password = flask.request.values.get('password') # 字典格式用get取值
# flask.request.json.get('username') # 字典格式用get取值
# flask.request.json.get('password') # 字典格式用get取值
# if flask.request.is_json: # 判断是否是json的入参
d = {'error_code': 0, 'msg': '登录成功', 'username': username, 'password': password}
return json.dumps(d, ensure_ascii=False)


@server.route('/api/get_bill')
def get_bill():
table_list = ['app_myuser', 'ssj'] # 和别的部门对接,只能查询这两张表,传入别的表报无权限
table_name = flask.request.values.get('table_name')
limit = flask.request.values.get('limit', 50)
if table_name and table_name in table_list:
sql = 'select * from %s limit %s;' % (table_name, limit)
result = con_mysql(sql)
data = {'error_code': 0, 'msg': '操作成功', 'data': result}
else:
data = {'error_code': -1, 'msg': '没有权限访问该表'}
return json.dumps(data, ensure_ascii=False)


server.run(host='0.0.0.0', port=8000, debug=True)
=======================================================================
import json
@server.route('/reg',methods = ['get','post'])
def reg():  # @server.route必须和def reg()紧紧挨着,就把下面的函数封装成一个接口,要不然是普通函数
# print(request.values)打印出一个字典,获取到在浏览器里传入的参数,这种格式是CombinedMultiDict([ImmutableMultiDict([('username', 'ssj'), ('password', '123')]), ImmutableMultiDict([])])
# username = request.values.get('username') # 调用接口传入的参数
# password = request.values.get('password') # 调用接口传入的参数
username = request.json.get("username") # 在postman里面入参是json类型的要用这种方式,用上面的会报错
password = request.json.get("password") # 在postman里面入参是json类型的要用这种方式,用上面的会报错
if username and password:
sql = 'select username,password from user where username="%s";' % username
res = conn_mysql(sql) # 执行sql
if res:
return '{"code":300,"msg":"你注册的用户已经存在"}'
else:
password = md5_passwd(password)
sql = 'insert into user(username, password) values ("%s","%s");' % (username, password)
conn_mysql(sql)
return '{"code":200, "msg":"注册成功!"}'
else:
return '{"code":938, "msg":"请查看接口文档"}'
# return 'hello,world!'

server.run(port = 8000, debug = True, host = '0.0.0.0') # host=0.0.0.0(windows下写0.0.0.0,mac下写0就ok)代表监听所有的IP,别人要想访问你的接口,在同一个局域网内在他的代码里写上你真实的IP就可以访问,debug=True是自动重启的意思,修改代码后服务会重启,要在浏览器里或postman里调一下,下图中绿色是自动重启按钮
posted @ 2018-03-12 11:50  laosun0204  阅读(175)  评论(0编辑  收藏  举报