python web 学习:装饰器记录接口调用——日志

当我们需要记录每个接口被调用时,总不能每次都写一遍数据库插入操作来记录该接口被调用了吧,这样会不仅显得啰嗦而且很呆。这时可以使用装饰器来进行该操作,我是使用了session来记录接口调用是否成功。
我的装饰器如下:
主要记录了调用接口请求方法、IP、API(接口函数名)、返回消息

#decorator.py文件
def logging_decorator(func):
    @wraps(func)
    def wrapped_function(*args, **kwargs):
        request = args[0]
        response = func(*args, **kwargs)
        userinfo_dict = get_userInfo(request) #get_userInfo是我自己封装的一个获取登录用户信息的函数,我放在下段代码
        ip = request.META["REMOTE_ADDR"]
        method = request.method
        # 该session存在的意义:每当接口调用失败时记录session,从而判断该次接口调用是否成功
        if request.session.get("error"):
            # 当存在error时记录请求接口失败,返回失败信息
            return_msg = 2
            # 每次使用该session之后将其删除以便后面接口调用时再次判断是否调用失败
            del request.session["error"]
        else:
            return_msg = 1
        if userinfo_dict["user"] == "user":
            print(userinfo_dict["user"])
            user_id = userinfo_dict["user_id"]
            print("method:",method,"ip",ip,"api:",func.__name__,"return_msg",return_msg)
            # log_api.objects.create(method=method,api_name=api_name,ip=ip,user=user_id,return_msg=return_msg)
        elif userinfo_dict["user"] == "admin":
            print("method:",method,"ip",ip,"api:",func.__name__,"return_msg",return_msg)
            user_id = userinfo_dict["admin_id"]
        return response
    return wrapped_function

get_userInfo函数的封装

# 获取用户信息
def get_userInfo(request):
    userInfo_dict = {} #定义一个字典存储数据
    userInfo_dict["user"] = request.session.get("user")
    userInfo_dict["is_login"] = request.session.get("is_login")
    if userInfo_dict["user"] == "user":
        userInfo_dict["user_id"] = request.session.get("user_id")
        return userInfo_dict
    if userInfo_dict["user"] == "admin":
        userInfo_dict["admin_id"] = request.session.get("admin_id")
        return userInfo_dict

装饰器使用方法:
比如我的视图函数如下

@logging_decorator #在此装饰
def index(request):
#假设try表示调用成功,except表示调用失败
	try:
	#接口使用调用成功则不设置session
		return render(.....)
	except:
	#失败则记录session
		request.session["error"] = "error" #用于判断接口是否调用成功
		return render(.....)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值