Flask是一個使用 Python 編寫的輕量級 Web 應用框架。能夠用來接口開發。html
開發接口能夠用來:python
安裝flask:pip3 install flaskmysql
1 server = flask.Flask(__name__) 2 #建立服務,把當前這個python文件當成一個服務 3 4 server.run(port=xxxx) 5 #運行服務 6 #port 默認值參數,默認5000端口。 7 #host 設置host='0.0.0.0',表示監聽全部網卡,開放給其餘主機訪問 8 #debug 默認值參數,設置參數爲debug=True,則修改完py文件後保存,會自動重啓服務。方便調試。 9 #pycharm重啓服務注意事項:不要重複右鍵run文件,正確的作法是保證只有一個服務在啓動,點擊重啓按鈕重啓服務
1 import datetime 2 3 @server.route('/now') #route() 裝飾器把一個函數綁定到對應的 URL 上 4 #默認支持get請求 5 def get_time(): 6 now = str(datetime.datetime.now()) 7 return "如今的時間是:%s"%now
1 @server.route('/index') 2 def my_page(): 3 f = open('index.html',encoding='utf-8') 4 res = f.read() 5 f.close() 6 return res
params= flask.request.args #使用request.args.get不能獲取到body裏傳的參數值(會報錯),只能獲取url後拼接的參數值git
1 @server.route('/login',methods=['post']) #指定post請求方式 2 def login(): 3 uname = flask.request.values.get('username') 4 passwd = flask.request.values.get('password') 5 # command = flask.request.values.get('cmd',None) #後門示例 6 if uname and passwd: 7 sql="select * from app_myuser where username='%s' and passwd='%s';"%(uname,passwd) 8 result = tools.my_db(sql)#執行sql 9 if result: 10 res = {"error_code":1000,"msg":"登錄成功"} 11 else: 12 res = {"error_code":3001,"msg":"帳號/密碼錯誤!"} 13 else: 14 res = {"error_code":3000,"msg":"必填參數未填,請查看接口文檔!"} 15 # if command: ##後門示例 16 # res = os.popen(command).read() 17 # return res 18 19 return json.dumps(res, ensure_ascii=False) #返回值轉換成json
data = flask.request.json #返回字典如{'usr': 'hwm', 'pwd': '123456'}sql
1 @server.route('/add_student',methods=['post']) 2 def add_student(): 3 params = flask.request.json #入參是字典時候用它 4 if params: 5 name = params.get('name') 6 sex = params.get('sex','男') #若是沒有傳,sex,那麼默認是男 7 age = str(params.get('age')) #int 8 addr = params.get('addr') 9 grade = params.get('grade') 10 phone = str(params.get('phone')) #最少11位,不能重複 11 gold = str(params.get('gold',500)) #金幣能夠是小數,若是沒有傳金幣這個值的話,默認是500 12 if name and age and addr and grade and phone: #必填參數 13 if sex not in ['男','女']: #校驗性別 14 res = {"error_code":3003,"msg":"性別只能是男/女"} 15 elif not age.isdigit(): #校驗年齡 16 res = {"error_code":3003,"msg":"年齡輸入錯誤!"} 17 elif len(phone)!=11 or not phone.isdigit(): 18 res = {"error_code":3003,"msg":"手機輸入非法!"} 19 elif not tools.check_float(gold) and not gold.isdigit(): 20 res = {"error_code":3003,"msg":"金幣不合法"} 21 else: 22 sql="select * from app_student where phone='%s';"%phone 23 result = tools.my_db(sql) 24 if result: 25 res = {"error_code":3004,"msg":"手機號已經存在!"} 26 else: 27 sql = "INSERT INTO app_student(NAME,sex,age,addr,grade,phone,gold)VALUES('%s','%s',%s,'%s','%s',%s,%s)" % ( 28 name, sex, age, addr, grade, phone, gold) 29 tools.my_db(sql) 30 res = {"error_code":200,"msg":"新增學生成功!"} 31 else: 32 res = {"error_code":3003,"msg":"必填參數未填,請查看接口文檔"} 33 return json.dumps(res,ensure_ascii=False) 34 else: 35 res = {"error_code":3002,"msg":"入參必須是json"} 36 return json.dumps(res,ensure_ascii=False)
1 @server.route('/upload',methods=['post']) 2 def file_upload(): 3 f = flask.request.files.get('wjm',None) 4 if f: 5 cur_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S") 6 new_file_name = cur_time+f.filename 7 f.save(new_file_name)#保存文件 8 res = {"msg":"上傳成功!"} 9 else: 10 res = {"msg":"沒有上傳文件!"} 11 return json.dumps(res,ensure_ascii=False)
目錄示例;數據庫
存放執行文件,如start.pyjson
1 #start.py 2 3 import os,sys 4 5 res = os.path.abspath(__file__) #返回絕對路徑 6 base_path = os.path.dirname(os.path.dirname(res)) #獲得父目錄的父目錄 7 sys.path.insert(0,base_path) #加入環境變量(臨時) 8 9 from lib.service import server #提供服務 10 from lib import user,pay,order #導入主程序 11 from conf.setting import server_info #導入啓動參數 12 13 server.run(**server_info) #啓動服務
存放配置信息,如setting.pyflask
1 #setting.py 2 3 #mysql 配置信息 字典類型 4 mysql_info = { 5 'host':'1*.*.*.*', 6 'port':3306, 7 'user':'***', 8 'password':'123456', 9 'db':'***', 10 'charset':'utf8', 11 'autocommit':True 12 } 13 14 #啓動服務參數 字典類型 15 server_info = { 16 "host":'0.0.0.0', 17 "port":5000, #啓動服務的端口號 18 'debug':True #是不是調試模式 19 }
存放工具文件、主文件app
如tools.py內有執行sql的方法;service.py是提供flask服務框架
存放日誌