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服务框架
存放日志