什么是接口:接口泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不影響外界其他實體與其交互的方式。
mock接口 :就是模擬接口。
使用flask模塊進行接口開發
web服務其實是:1.啟動一個服務,2接收客戶端傳過來的數據,3,登錄,注冊,刪除,上傳,修改,等數據,4返回數據信息。
返回時間接口

import flask,datetime#導入flask,和時間模塊 server = flask.Flask(__name__)#作為一個服務 @server.route("/cc")#括號里寫的是訪問時的路徑地址 def get_time(): now = str(datetime.datetime.now()) return "現在時間是:%s"%now server.run(host="0.0.0.0",port=8888,debug=True)#啟動服務,host寫成0.0.0.同一個局域網可以訪問,debug=True重啟服務
跳轉到我的網頁接口
1.先好html網頁,在寫接口進行跳轉

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>我的網站</title> </head> <body> <input type="text" placeholder="請輸入你的賬號"> <input type="password" placeholder="請輸入你的密碼"> <input type="button" value="提交"> <div style="width: 80px;height: 80px;background-color: green" > </div> <a href="http://www.baidu.com">點我</a> </body> </html>

import flask #導入flask server = flask.Flask(__name__) #作為一個服務 @server.route("/index") #括號里寫的是訪問時的路徑地址,必須已/開頭 def my_page(): f = open('index.html',encoding='utf-8') #打開網頁為index.html的網頁 #文件必須放在同級目錄下,不然會出錯,或者直接寫文件的絕對路徑 res = f.read() #讀取 f.close() #關閉 return res server.run(port=8888)#啟動服務
登錄接口
flask獲取請求參數、連接數據庫1、傳參,2、執行sql查數據庫(已有該表)3、返回結果

import flask #導入flask server = flask.Flask(__name__) #作為一個服務 def login(): #登錄需要兩個參數,name和pwd uname=flask.request.values.get('username')# 傳參,前面的是變量,括號里面是key passwd=flask.request.values.get('password') # args 這個方法就只能獲取到url里面傳的參數 # values 這個方法不管你是url里面傳的參數還是,k-v傳的,都可以獲取到的 if uname and passwd:# 非空為真 # 需要先寫一個導入數據庫的函數,例如我寫了一個名稱為tools的函數(如圖),放在另一個python文件中,import tools進行調用。當然也可以直接寫在本python文件中,但是顯得會累贅。 sql="SELECT * FROM app_myuser WHERE username='%s' AND passwd='%s';"%(uname,passwd) result = tools.my_db(sql)#執行sql if result: res={"error_code":1000,"mag":"登錄成功"} # 接口返回的都是json,所以要這樣寫。先導入json模塊,import json。 else: res = {"error_code": 3001, "mag": "賬號或密碼錯誤!"} else: res={"error_code":3000,"mag":"必填參數未填,請查看接口文檔!"} return json.dumps(res,ensure_ascii=False) #防止出現亂碼;json.dumps()函數是將字典轉化為字符串 server.run(port=8888)

import pymysql def my_db(sql): conn=pymysql.connect( host='xxx.xxx.xxx.xx',#數據庫地址 user='xxx', #用戶名 password='123456',#密碼 db='jxz', #數據庫名 charset='utf8', autocommit=True# 自動提交 ) cur=conn.cursor(cursor=pymysql.cursors.DictCursor)# 建立游標;默認返回二維數組,DictCursor指定返回字典; cur.execute(sql)#execute幫你執行sql res=cur.fetchall()#拿到全部sql執行結果 cur.close()# 關閉游標 conn.close()# 關閉數據庫 return res # 返回sql執行的結果
新增用戶接口
1.flask獲取請求參數、2.連接數據庫;3.入參是json類型,參數有限制,4.sql語句新增用戶

import flask,json,tools #導入flask, tools 存放數據庫的操作 server = flask.Flask(__name__) #作為一個服務 @server.route('/add_student',methods=['post']) def add_student(): params=flask.request.json #入參是字典json時用它,下面的代碼要判斷傳入的參數是否是json類型 if params: name=params.get('name') sex=params.get('sex','男')# 如果沒有傳。默認值是男 age=str(params.get('age'))# int addr=params.get('addr') grade=params.get('grade') phone=str(params.get('phone'))# 最少11位,不能重復 gold=str(params.get('gold',500)) # 金幣可以是小數,如果沒有傳默認是500 if name and age and addr and grade and phone:# 必填參數校驗 if sex not in['男','女']: #如果性別不是男或者女 res = {"error_code": 3003, "msg": "性別只能是男或者女"} elif not age.isdigit():# 如果不是整數類型 res = {"error_code": 3004, "msg": "年齡輸入錯誤"} elif len(phone)!=11 or not phone.isdigit(): res = {"error_code": 3005, "msg": "手機號輸入錯誤"} elif not gold.isdigit() and not tools.check.float(gold):#如果不是整數也不是小數 res = {"error_code": 3006, "msg": "金幣輸入錯誤"} else: sql="select* from app_student where phone='%s';"%phone #查看數據庫中是否有這個手機號,有的話說明重復 result = tools.my_db(sql) # 執行sql if result: res = {"error_code": 1000, "msg": "手機號已經存在"} else: sql = "INSERT INTO app_student(NAME,sex,age,addr,grade,phone,gold)VALUES('%s','%s',%s,'%s','%s',%s,'%s')" % ( name, sex, age, addr, grade, phone, gold) tools.my_db(sql) res = {"error_code": 200, "msg": "新增成功! "} else: res = {"error_code": 3007, "msg": "必填參數未填寫"} else: res={"error_code":3002,"msg":"入參必須是json類型"} return json.dumps(res,ensure_ascii=False)#防止出現亂碼 server.run(port=8888)
文件上傳接口

import flask,json,datetime #導入flask, tools 存放數據庫的操作 server = flask.Flask(__name__) #作為一個服務 def file_upload(): f=flask.request.files.get('wjm',None) # 上傳文件,取一個名字,再給名字一個默認值None if f:# 如果文件不為空 cur_time=datetime.datetime.now().strftime("%Y%m%d%H%M%S") # 如果上傳同一個文件兩次,會被覆蓋,所以加一個當前日期,並指定日期格式strftime("%Y%m%d%H%M%S") new_file_name=cur_time+f.filename# 新文件名=時間+原來的文件名 f.save(new_file_name)#保存文件 res={"msg":"文件上傳成功"} else: res={"msg":"沒有上傳文件"} return json.dumps(res,ensure_ascii=False)#防止出現亂碼 server.run(port=8888)