Flask Rest接口
Flask适用于简单的接口请求
安装
pip install Flask
pip install Flask-RESTful
仅简单请求url,然后出发处理程序,返回处理结果
app.py代码如下
from flask import Flask,jsonify
from flask_restful import Api,Resource,request,reqparse
from sqlalchemy import create_engine
from local_settings import SQLALCHEM
import logging,datetime
logger=logging.getLogger('my_app')
app=Flask(__name__)
api=Api(app)
class ProceListAPI(Resource):
def __init__(self):
self.engine=create_engine(alchemy_conf,pool_size=5,max_overflow=0,pool_recycle=7*60) # 初始化全局的数据库连接池
self.reqparse=reqparse.RequestParser()
self.reqparse.add_argument('subid',action='append',dest='cart_code',type=int,required=True,help='subid is needed!',location='form')
self.reqparse.add_argument('description',type=str,default="",location='json') # 配置 哪些入参是什么格式,在什么位置,dest表示别名
supper(PriceListAPI,self).__init__()
def get(self): #flask的api类中的所有get请求经过 get方法 ,post请求 经过post方法
logger.warning('request form:{},num:{}'.format(request.args,type(request.args.get('subid'))))
cart_code = request.args.get('subid')
if not cart_code:
return {'error':'subid is Rquired!'}
cart_code=cart_code.split(',')
with self.engine.connect() as conn:
result = conn.execute('select distinct cart_code,price from price_store where collect_time>=curdate();')
datas=result.fetchall()
dup_dict={}
for d in datas:
if d[0] in cart_code:
dup_dict[d[0]]=(d[0],d[1])
return dup_dict
def post(self):
args=self.reqparse.parse_args()
cart_code=args['cart_code']
if not cart_code:
return {'error':'subid is Required!'}
return {'cart_code':cart_code}
api.add_resource(PriceListAPI,'./price/',endpoint='stores') #定义class类 对应的url
if __name__ == '__main__':
app.run(debug=True,port=5091,houst='0.0.0.0')
通过 python app.py就可以运行
给API class添加装饰器 ,在每次请求处理前先进行验证 ,如常用的验证 Headers中的Authorization字段
将app_key和app_secret融合 加密到组成 Authorization的值,来判断用户是否为合法用户
首先需要定义一个装饰器函数
from functools import wraps
def my_authenticate(func):
@wraps(func)
def wrapper(*args,**kwargs):
authen = request.headers.get('Authorization')
if not authen:
return {"code":403,"message":"Authenticated Error","data":{"isEnabled":0}},403
logger.warning('authen:%s'%(authen))
encode_authen=authen.encode('utf-8')
decode_authen = base64.b64decode(encode_authen)
app_key,app_sign,timestamp = decode_authen.decode('utf-8').split(';')
now = time.time()
if now-float(timestamp)>2*60:
return {"code":403,"message":"Authenticated expired","data":{"isEnabled":0}},403
if app_key != APP_KEY:
return {"code":403,"message":"Authenticate app_key error","data":{"isEnabled":0}},403
md5_obj = hashlib.md5()
content = app_key+APP_SECRET+timestamp
md5_obj.update(content.encode('utf-8'))
my_sign=md5_obj.hexdigest()
if app_sign==my_sign:
logger.info("authen ok!")
return func(*args,**kwargs)
return {"code":403,"message":"Authenticated Error","data":{"isEnabled":0}},403
return wrapper
然后在class ProceListAPI(Resource)的开头加上 decorators=[my_authenticate]
如:
class ProceListAPI(Resource):
decorators=[my_authenticate]
def __init__(self):
self.reqparse=reqparse.RequestParser()
....
这样就相当于给类ProceListAPI的每个方法都加上了装饰器 my_authenticate
Flask Rest接口的更多相关文章
- Flask request接口获取参数
Flask request接口获取参数 request.form.get("key", type=str, default=None) 获取表单数据, request.args ...
- python——flask常见接口开发(简单案例)
python——flask常见接口开发(简单案例)原创 大蛇王 发布于2019-01-24 11:34:06 阅读数 5208 收藏展开 版本:python3.5+ 模块:flask 目标:开发一个只 ...
- Python直接改变实例化对象的列表属性的值 导致在flask中接口多次请求报错
错误原理实例如下: class One(): list = [1, 2, 3] @classmethod def get_copy_list(cls): # copy一份list,这样对list的改变 ...
- Python flask模块接口开发学习总结
引言 Flask 是一个简单且十分强大的Python web 框架.它被称为微框架,“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩 ...
- Keras + Flask 提供接口服务的坑~~~
最近在搞Keras,训练完的模型要提供个预测服务出来.就想了个办法,通过Flask提供一个http服务,后来发现也能正常跑,但是每次预测都需要加载模型,效率非常低. 然后就把模型加载到全局,每次要用的 ...
- pyhton【flask接口开发】
使用flask进行接口开发 语言:Python3 框架:flask 在进行开发前首先得安装flask,然后才能使用.安装可以直接使用pip命令进行安装:pip install flask. 使用fla ...
- 使用Flask开发简单接口
作为测试人员,在工作或者学习的过程中,有时会没有可以调用的现成的接口,导致我们的代码没法调试跑通的情况. 这时,我们使用python中的web框架Flask就可以很方便的编写简单的接口,用于调用或调试 ...
- Flask备注三(Context)
Flask备注三(Context) Flask支持不同的应用场景下,对应不同的local context(本地上下文环境),用来提供当前环境下的资源.lcoal context和全局变量以及局部变量最 ...
- python框架(flask/django/tornado)比较
一.对外数据接口 三者作为web框架,都是通过url映射对外的接口 flask:以decorator的形式,映射到函数中 django:以字典形式,映射到函数 tornado: 以字典形式,映射到类中 ...
随机推荐
- nginx 七层负载均衡
[tcp] nginx 七层负载均衡 nginx负载均衡概述 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡, ...
- mtu测试
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/jeromezmzx007/article ...
- 移动网络游戏实现流程——并借此阐明pomelo在GitHub上各个项目间的关系
<!DOCTYPE html> 摘要:本文通过一个简易流程图介绍如何基于Cocos2d-x引擎和pomelo服务器框架开发一个移动网络游戏.并借此阐明pomelo提供的各个项目间的关系. ...
- Druid-代码段-1-2
所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程1.1,责任链的执行: //DruidDataSource类里的方法:获取连接 public DruidPooledConn ...
- Nginx 配置详细文件
概述 Nginx 是使用一个 master 进程来管理多个 worker 进程提供服务.master 负责管理 worker 进程,而 worker 进程则提供真正的客户服务,worker 进程的数量 ...
- springmvc的入门
1. 什么是springMVC? Spring Web MVC是一种基于Java的实现了MVC设计模式的.请求驱动类型的.轻量级Web框架. 2. SpringMVC处理请求的流程 2.1 首先用户发 ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第十三周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010113-刘兴瑞《面向对象程序设计(java)》第十二周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- LeetCode 5129. 下降路径最小和 II Minimum Falling Path Sum II
地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/minimum-falling-path-sum-ii/ 题目描述给你一 ...
- python爬虫之csv文件
一.二维数据写入csv文件 题目要求: 读入price2016.csv文件,将其中的数据读出,将数字部分计算百分比后输出到price2016out.csv文件中 知识点: 对于列表中存储的二维数据, ...