版本:python3.5+
模块:flask
功能:1支持get方法传参
2.支持post方法传参
3.支持上传excel
4.支持上传图片并用浏览器预览
1.开发一个只接受get方法的接,并返回相应内容。
from flask import Flask,request
import json
app=Flask(__name__)
# 只接受get方法访问
@app.route("/test_1.0",methods=["GET"])
def check():
# 默认返回内容
return_dict= {'return_code': '200', 'return_info': '处理成功', 'result': False}
# 判断入参是否为空
if request.args is None:
return_dict['return_code'] = '5004'
return_dict['return_info'] = '请求参数为空'
return json.dumps(return_dict, ensure_ascii=False)
# 获取传入的params参数
get_data=request.args.to_dict()
name=get_data.get('name')
age=get_data.get('age')
# 对参数进行操作
return_dict['result']=tt(name,age)
return json.dumps(return_dict, ensure_ascii=False)
# 功能函数
def tt(name,age):
result_str="%s今年%s岁" %(name,age)
return result_str
if __name__ == "__main__":
app.run(debug=True)
本机pycharm运行后如下:
使用postman工具发送请求到接口地址 127.0.0.1:5000/test_1.0
结果如下:
-------------------------------------------分割线------------------------------------------------------
2.如果接口改成只支持post方法访问,代码如下:
from flask import Flask,request
import json
app=Flask(__name__)
# 只接受POST方法访问
@app.route("/test_1.0",methods=["POST"])
def check():
# 默认返回内容
return_dict= {'return_code': '200', 'return_info': '处理成功', 'result': False}
# 判断传入的json数据是否为空
if request.get_data() is None:
return_dict['return_code'] = '5004'
return_dict['return_info'] = '请求参数为空'
return json.dumps(return_dict, ensure_ascii=False)
# 获取传入的参数
get_Data=request.get_data()
# 传入的参数为bytes类型,需要转化成json
get_Data=json.loads(get_Data)
name=get_Data.get('name')
age=get_Data.get('age')
# 对参数进行操作
return_dict['result']=tt(name,age)
return json.dumps(return_dict, ensure_ascii=False)
# 功能函数
def tt(name,age):
result_str="%s今年%s岁" %(name,age)
return result_str
if __name__ == "__main__":
app.run(debug=True)
使用postman测试接口:
-------------------------------------------分割线------------------------------------------------------
3.支持上传excel文件的接口如下。
from flask import Flask, request
import xlrd
app = Flask(__name__)
# 处理中文编码
app.config['JSON_AS_ASCII'] = False
# 跨域支持
def after_request(resp):
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
app.after_request(after_request)
# 上传表格
@app.route("/excel_info", methods=["GET", "POST"])
def excel_info_():
if request.method == "POST":
# 获取参数用request.form,获取文件用request.files
file = request.files.get('file')
if not file:
return {"code": '401', "message": "缺少参数"}
# 读取表格内容
workbook = xlrd.open_workbook(file_contents=file.read())
# 取第一个sheet
sheet = workbook.sheet_by_index(0)
# 获取总行数
row = sheet.nrows
# 从表格中选取字段
titles = ['name', 'age', 'address']
json_list = []
# 遍历每一行的内容
for i in range(row):
if i == 0:
continue
row_value = sheet.row_values(i)
# 构造字典
obj = dict()
json_list.append(obj)
for title, col_val in zip(titles, row_value):
obj.setdefault(title, col_val)
# 将读取的内容作为结果返回
return {"code": '200', "message": json_list}
else:
return {"code": '403', "message": "仅支持post方法"}
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
①创建一张测试表格
②然后使用postman测试接口
-------------------------------------------分割线------------------------------------------------------
4.支持上传图片并且可以访问的接口
这里我的目录结构如下:
其中启动文件为app_br.py,静态文件存放在static目录下,templates存放.html文件。
代码块app_br.py如下:
from flask import Flask, request, Response
from werkzeug.utils import secure_filename
import os
app = Flask(__name__)
# 处理中文编码
app.config['JSON_AS_ASCII'] = False
# 跨域支持
def after_request(resp):
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
app.after_request(after_request)
# 设置图片保存文件夹
app.config['UPLOAD_FOLDER'] = './static/images'
# 设置允许上传的文件格式
ALLOW_EXTENSIONS = ['png', 'jpg', 'jpeg']
# 判断文件后缀是否在列表中
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[-1] in ALLOW_EXTENSIONS
# 上传图片
@app.route("/upload_image", methods=['POST', "GET"])
def uploads():
if request.method == 'POST':
# 获取post过来的文件名称,从name=file参数中获取
file = request.files['file']
# 检测文件格式
if file and allowed_file(file.filename):
# secure_filename方法会去掉文件名中的中文
file_name = secure_filename(file.filename)
# 保存图片
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file_name))
return {"code": '200', "data": "", "message": "上传成功"}
else:
return "格式错误,仅支持jpg、png、jpeg格式文件"
return {"code": '503', "data": "", "message": "仅支持post方法"}
# 查看图片
@app.route("/images/<imageId>")
def get_frame(imageId):
# 图片上传保存的路径
with open(r'./static/images/{}'.format(imageId), 'rb') as f:
image = f.read()
result = Response(image, mimetype="image/jpg")
return result
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
①使用postman测试上传图片功能
②测试从浏览器查看图片