python flask demo

#coding=utf-8
from flask import Flask,request,Response,jsonify,session,url_for
import os
import config
import new_system_api
import interface_encrpty
import json

#是否使用老系统报表(是走两种方式,否的话只走新系统api)
if_use_old_baobiao = config.if_use_old_baobiao

#自定义的MyResponse(最终调用父类构造新的response)
class MyResponse(Response):
    @classmethod
    def force_type(cls, rv, environ=None):
        print rv
        if isinstance(rv, dict):
            rv = jsonify(rv)
        return super(MyResponse, cls).force_type(rv, environ)

app = Flask(__name__)
app.response_class = MyResponse
app.config['SECRET_KEY']=os.urandom(24)   #设置为24位的字符,每次运行服务器都是不同的,所以服务器启动一次上次的session就清除。
# app.config['PERMANENT_SESSION_LIFETIME']=timedelta() #设置session的保存时间。
app.config['JSON_AS_ASCII'] = False #使得返回中文

class CustomFlaskErr(Exception):
    # 默认的返回码
    status_code = 400
    # 自己定义了一个 return_code,作为更细颗粒度的错误代码
    def __init__(self, return_code=None, status_code=None, data=None,message=None):
        Exception.__init__(self)
        self.return_code = return_code
        if status_code is not None:
            self.status_code = status_code
        self.data = data
        self.message = message
    # 构造要返回的错误代码和错误信息的 dict
    def to_dict(self):
        rv = {}
        rv["data"] = self.data
        # 增加 dict key: return code
        rv['return_code'] = self.return_code
        # 增加 dict key: message, 具体内容由常量定义文件(config)中通过 return_code 转化而来
        rv['message'] = self.message
        return rv

#这个是拦截器(加解密的拦截器)
@app.before_request
def print_request_info():
    data = request.args.get("data")
    data = data.replace(" ","+")
    if data is None:
        raise CustomFlaskErr(return_code=500, status_code=200, data="",message="data参数不存在")
    else:
        try:
            data = interface_encrpty.AES_128_CFB_decode(data)
        except Exception,e:
            raise CustomFlaskErr(return_code=501, status_code=200, data="", message="data数据解密失败")
        try:
            data = json.loads(data)
        except Exception,e:
            raise CustomFlaskErr(return_code=502, status_code=200, data="", message="data不是json字符串")
        session["data"] = data




#当raise CustomFlaskErr的时候调用自定义
@app.errorhandler(CustomFlaskErr)
def handle_flask_error(error):
    # response 的 json 内容为自定义错误代码和错误信息
    response = jsonify(error.to_dict())
    # response 返回 error 发生时定义的标准错误代码
    response.status_code = error.status_code
    return response

@app.route('/<path:url>',methods=['POST','GET'])
def init(url):
    path = url_for("get_account_date_result")
    return generate_response(path+"|"+session["data"],"",200)


def generate_response(data=None, message=None, code=None):
    return {'message': message,'code': code,'data': data}

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8090)

 

总结:上述自定义了异常处理 前置拦截器对数据加解密  统一返回处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值