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的更多相关文章

  1. odoo API装饰器one、model、multi的区别

    1.one装饰器详解 odoo新API中定义方式:    date=fields.Date(string="date",compute="_get_date") ...

  2. Odoo的@api.装饰器

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9281437.html Odoo自带的api装饰器主要有:model,multi,one,constrains, ...

  3. 【转】odoo 新API装饰器中one、model、multi的区别

    http://blog.csdn.net/qq_18863573/article/details/51114893 1.one装饰器详解 odoo新API中定义方式: date=fields.Date ...

  4. odoo10 api 装饰器

    http://www.cnblogs.com/kfx2007/p/3894297.html one:装饰record-style方法中的self为单一实例,被装饰的方法将会在每一条记录中循环调用,返回 ...

  5. [原创]django+ldap实现单点登录(装饰器和缓存)

    前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...

  6. python基础知识7——迭代器,生成器,装饰器

    迭代器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器 ...

  7. Python 第五天 装饰器

    装饰器 装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. def wrapper(func): def result(): pri ...

  8. python学习笔记-(八)装饰器、生成器&迭代器

    本节课程内容概览: 1.装饰器 2.列表生成式&迭代器&生成器 3.json&pickle数据序列化 1. 装饰器 1.1 定义: 本质上是个函数,功能是装饰其他函数—就是为其 ...

  9. Python装饰器由浅入深

    装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...

随机推荐

  1. BZOJ 4066 kd-tree 矩形询问求和

    第一次遇见强制在线的题目 每个操作都和前面的ans有关 所以不能直接离线做 在这个问题中 kdtree更像一个线段树在一维单点修改区间询问的拓展一样 如果区间被询问区间完全包含 就不用继续递归 插入时 ...

  2. 直播P2P技术3-伙伴节点质量评估及子流订阅

    以上模型,暂且称之为W-P2P吧.

  3. centos7安装MPlyaer

    最近更换了centos7系统,对新系统的操作不是太熟悉.大神轻喷.昨晚突然想要下个电影看看,结果发现系统自带的播放器支持的视频格式有限,google查了一下,他们推荐使用MPlayer.于是经过一通g ...

  4. Dom4j quick start guide

    Parsing XML Using Iterators Powerful Navigation with XPath Fast Looping Creating a new XML document ...

  5. review37

    线程的常用方法 1.start() 线程调用该方法将启动线程,使之从新建状态进入就绪队列排队. 2.run() 3.sleep() 4.isAlive() 线程处于新建状态时,线程调用isAlive( ...

  6. 防止xss,sql攻击函数

    <?php //php防注入和XSS攻击通用过滤. //by qq:831937 $_GET && SafeFilter($_GET); $_POST && Sa ...

  7. PowerDesigner15生成数据库 同时自动生成字段说明(备注)信息

    1.打开Database->Generate Database 2.切换到Format标签页,选中Generate name in empty comment即可生成每个字段的说明(备注)信息 ...

  8. Javascript-理解事件总结

    事件 [事件流]表述的是从页面接收事件的顺序.1.事件冒泡流:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档).所有浏览器都支持.2.事件捕获:与事件冒泡相反,事件捕获的用意在 ...

  9. 51nod 1102 单调栈

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 1102 面积最大的矩形 基准时间限制:1 秒 空间限制:1310 ...

  10. 51nod 1276

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 1276 岛屿的数量 题目来源: Codility 基准时间限制: ...