python——flask常见接口开发(简单案例)

版本: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测试上传图片功能

②测试从浏览器查看图片 

http://127.0.0.1:5000/images/2221.jpg

  • 63
    点赞
  • 407
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值