装饰器api

Posted maze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器api相关的知识,希望对你有一定的参考价值。

import hashlib

import time
from django.http import HttpResponse

key="qwrwertyuiop"
visited_key={
    #‘key‘:time
}


def api_auth(func):
    def inner(request,*args,**kwargs):
        server_float_ctime = time.time()
        auth_header_val = request.META.get("HTTP_AUTH_API")
        client_md5_str, client_ctime = auth_header_val.split("|", maxsplit=1)
        client_float_ctime = float(client_ctime)
        # 第一关时间
        if (client_float_ctime + 10) < server_float_ctime:
            return HttpResponse("时间太久了")
        # 第二关加密
        server_md5_str = md5("%s|%s" % (key, client_ctime,))

        if client_md5_str != server_md5_str:
            return HttpResponse("休想")

        # 第三关
        if visited_key.get(client_md5_str):
            return HttpResponse("you are late")

        visited_key[client_md5_str] = client_float_ctime

        return func(request,*args,**kwargs)
    return inner


def md5(arg):
    hs=hashlib.md5() #由于在python3中在update用的是字节类型所以需要把字符串变成字节
    hs.update(arg.encode("utf8"))
    return hs.hexdigest()

@api_auth
def test(request):
    # server_float_ctime = time.time()
    # auth_header_val=request.META.get("HTTP_AUTH_API")
    # client_md5_str,client_ctime=auth_header_val.split("|",maxsplit=1)
    # client_float_ctime=float(client_ctime)
    # #第一关时间
    # if (client_float_ctime+10) < server_float_ctime:
    #     return HttpResponse("时间太久了")
    # # 第二关加密
    # server_md5_str = md5("%s|%s" %(key,client_ctime,))
    # 
    # if client_md5_str != server_md5_str:
    #     return HttpResponse("休想")
    # 
    # #第三关
    # if visited_key.get(client_md5_str):
    #     return HttpResponse("you are late")
    # visited_key[client_md5_str]=client_float_ctime
    return  HttpResponse("正常用户")

  

以上是关于装饰器api的主要内容,如果未能解决你的问题,请参考以下文章

Python(pandas):通过pandas API使用装饰器

Python面向对象学习之八,装饰器

测试包装 api 路由的装饰器

为啥 Django REST API 装饰器会破坏 Django non_atomic_requests 装饰器?

装饰器api

odoo10 api 装饰器