flask调用api接口,flask-api
本文主要介绍了利用Flask构建api服务的实现步骤,通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
Flask是用Python写的轻量级Web应用框架,非常适合个人开发。我们将在这里创建一个接口。
为了调试方便,本文使用了get接口。Get接口很简单,不需要上传任何数据,只需要在路径后面添加一个get方法,它返回一个字符串。
本文只是Flask开发的接口的初步文档,从最简单的接口到稍微复杂一点的接口,以后如果有时间会逐步完善,包括令牌认证、跨域认证、蓝图应用、日志管理等等。
第一步是在配置中配置数据源。
configs.py
主机=127.0.0.1
PORT=5432
数据库=runoobdb
用户名=postgres
密码=*****
#配置主数据库
DB _ URI= PostgreSQL psycopg 2://{用户名} : {密码} @ {主机} : {端口}/{db} 。格式(用户名=用户名,密码=密码,
主机=主机,端口=端口,数据库=数据库)
# SQLALCHEMY _ DATABASE _ URI= PostgreSQL psycopg 2://postgres : * * * * * @ 127 . 0 . 0 . 1:5432/runoobdb
#连接到其他数据库
SQLALCHEMY_BINDS={
xxxdb : PostgreSQL psycopg 2://postgres3360123456 @ localhost :5432/Linc ms3 ,
yyydb : PostgreSQL psycopg 2://postgres 3360123456 @ localhost :5432/Linc ms4 ,
zzzdb : SQLite :///users . db
}
URI数据库=URI数据库
SQLALCHEMY _ TRACK _ MODIFICATIONS=False
SQLALCHEMY_ECHO=True
其次,在exts中定义全局db。
exts.py
从flask_sqlalchemy导入sqlalchemy
db=SQLAlchemy()
第三步是构造一个flaskutils,在这个flaskutils中定义了接口所应用的一些常用类,比如数据转码、数据集转换成json、解析url逗号参数等。以后还会扩充功能。
flaskutils.py
导入小数
将numpy作为np导入
导入json,datetime,configparser
类DataEncoder(json。JSONEncoder):
数据代码转换类
def默认(self,obj):
“”对无法转换为json的数据类型进行代码转换。
当前支持的代码转换类型1。将整数、浮点数转换成整数和浮点数
2.将Numpy的ndarray转换为list
3.将np.datetime64转换为字符串4的前10位数字。将datetime.datetime转换为 %Y-%m-%d %H:%M:%S
5.将datetime.date转换为 %Y-%m-%d
6.将字节转换成utf-8字符串
见:
Obj:数据对象
出:
转换的数据
异常:
没有什么
if isinstance(obj,np.integer):
返回int(obj)
elif isinstance(obj,np.floating):
返回浮点(对象)
elif isinstance(obj,np.ndarray):
返回对象列表()
elif isinstance(obj, np.datetime64):
return str(obj)[:10]
elif isinstance(obj, datetime.datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
elif isinstance(obj, datetime.date):
return obj.strftime("%Y-%m-%d")
elif isinstance(obj, decimal.Decimal):
return float(obj)
elif isinstance(obj, bytes):
return str(obj, encoding=utf-8)
else:
return json.JSONEncoder.default(self, obj)
def getsqlresultjson(db, sql,params={}):
"""根据db和sql语句,将结果集转换为json格式
根据db和sql语句,将结果集转换为json格式
第一步:根据cursor获取元数据,生成键值列表
第二步:遍历结果集,将键值列表和结果集组装成字典,加入列表
第三步:将列表通过DataEncoder进行转码
入参:
db: 数据库实例.
sql: 待运行的SQL语句
出参:
Json格式:
举例: {Serak: (Rigel VII, Preparer),
Zim: (Irk, Invader),
Lrrr: (Omicron Persei 8, Emperor)}
异常:
无 """
resultdict = []
cursor = db.session.execute(sql,params=params).cursor
resultproxy = db.session.execute(sql,params=params).fetchall()
# 获取元数据
colname = [i[0] for i in cursor.description]
# 获取结果集,组成字典,加入列表
for rowproxy in resultproxy:
rowresult = dict(zip(colname, rowproxy))
resultdict.append(rowresult)
# 生成json格式
jsonstr = json.dumps(resultdict, cls=DataEncoder)
return jsonstr
def parasecommaparamtolist(param):
处理in传递参数,in传递参数可适用于两种传递方式,逗号传递参数或参数传递
此处主要是处理,逗号传递参数,返回为list
# http://127.0.0.1:5000/getresultbysqlgetparaminbylist?sqlid=sql10&begindate=2018&enddate=2020&kpicode=03010101
# http://127.0.0.1:5000/getresultbysqlgetparaminbylist?sqlid=sql10&begindate=2018&enddate=2020&kpicode=03010101&kpicode=031111111
# http://127.0.0.1:5000/getresultbysqlgetparaminbylist?sqlid=sql10&begindate=2018&enddate=2020
# http://127.0.0.1:5000/getresultbysqlgetparaminbylist?sqlid=sql10&begindate=2018&enddate=2020&kpicode=03010101,222222222
# http://127.0.0.1:5000/getresultbysqlgetparaminbylist?sqlid=sql10&begindate=2018&enddate=2020&kpicode=03010101&kpicode=03010101
:param param:
:return:
字符串列表
result = []
for val in param.split(,):
if val:
result.append(val)
return result
第四步,在app文件构建初始版本
app.py
import configs
第五步,在app文件中配置sql语句,原本想尝试一下mybis类型的配置文件,后来决定简化;主要包括三条sql,第一条不需要传参,第二条传递常规参数,第三条传递in参数,尤其是in参数,基本上网上找到的方法都不可靠,本文算是原创吧。
sqldict={}
1、构造第一个最简单sql返回接口,不需要传递sql参数,但需要传递sqlid参数
@app.route(/getresultbysql, methods=[GET, POST])
2、构造一个sql内部传参的接口,通过字典参数方式
@app.route(/getresultbysqlparam, methods=[GET, POST])
3、通过url进行sql参数的传递。
@app.route(/getresultbysqlgetparam, methods=[GET, POST])
4、通过url进行sql参数的传递,不过不传递in参数,而是在路由函数汇总内部指定in参数
@app.route(/getresultbysqlgetparamin, methods=[GET, POST])
5、通过url进行in参数和普通参数的传递,这里可以支持两种方式,一种是&aa=xxx&aa=yyy,一种是aa=xxx,yyy。
@app.route(/getresultbysqlgetparaminbylist, methods=[GET, POST])
6、标准化接口响应返回结果。
@app.route(/getresultbysqlgetparaminbylistresponse, methods=[GET, POST])
到此这篇关于Flask搭建api服务的实现步骤的文章就介绍到这了,更多相关Flask搭建api服务内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。