Django学习手册 - 基于requests API验证(二)
原理分析:
API接口验证
1.一个认证的key server端 和 client端都必须有这么一个认证key。
2.认证登录的时间限定
3.保存已验证的信息,在以后的验证不能再次登录
client 端:
import requests
import hashlib
import time # 基于验证的key
au_key = "dawefgdsfsafdsadas" # 基于验证的时间
au_time = time.time() # 将验证的key与时间合并成一个字符
au_key_time = "%s|%s"%(au_key,au_time) # 将合并的字符进行MD5加密
m = hashlib.md5()
m.update(bytes(au_key_time,encoding='utf-8'))
authkey = m.hexdigest() # 将生成加密的 KEY 与 时间传递至服务端
url = "http://127.0.0.1:8000/index/"
data = {"a":1,'b':"",'c':3,'d':4}
headers = {'authkey':authkey,'autime':str(au_time)} a = requests.post(url=url,data=data,headers=headers)
print(a.text)
server 端views:
from django.shortcuts import render,HttpResponse
import hashlib
import time
# Create your views here. au_list = [] def index(request): # 与client端一致的验证key
au_key = "dawefgdsfsafdsadas"
# 从请求头中取出client端 加密前的时间
client_au_time = request.META['HTTP_AUTIME'] # 将服务端的key 与 client的时间合并成字符
server_au_key = "%s|%s" % (au_key, client_au_time) # 然后将字符也同样进行MD5加密
m = hashlib.md5()
m.update(bytes(server_au_key, encoding='utf-8'))
authkey = m.hexdigest() # 取出client端加密的key
clint_au_key = request.META['HTTP_AUTHKEY'] # 三重验证机制 # 1.超出访问时间5s后不予验证通过。
server_time = time.time()
if server_time - 5 > float(client_au_time):
return HttpResponse("超时!") # 2.服务端加密的key值 跟 client发过来的加密key比对是否一致?
if authkey != clint_au_key:
return HttpResponse("验证失败!") # 3.比对当前的key值是否是以前访问过的,访问过的也不予验证通过。
if authkey in au_list:
return HttpResponse("验证码已过期") # 将成功登陆的key值保存在列表中。
au_list.append(authkey) return HttpResponse("OK")
Django学习手册 - 基于requests API验证(二)的更多相关文章
- Django学习手册 - 基于requests API验证(一)
验证需要知道requests提交数据的几种方式: GET 方式: # get 方式,传递数值可以直接通过url传递:(服务端接受 GET) requests.get(url='http://127.0 ...
- 六、Django学习之基于下划线的跨表查询
六.Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码.反向查询例子反之. 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 resul ...
- 五、Django学习之基于对象的跨表查询
五.Django学习之基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置.例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的 ...
- Django学习手册 - 权限管理(二)
从数据库获取数据后,对数据进行清洗 目标: 数据1,存放至session 中的数据 数据2,显示至前端的菜单数据 清洗数据: 1.session存放的数据:(menu_leaf_dict) 2.前端菜 ...
- Django学习手册 - Form 插件
""" 核心: from django import formsfrom django.forms import fieldsfrom django.forms impo ...
- Django学习手册 - 如何安装django 和 python ?
整体步骤阐述:(windows环境下) 步骤一,下载python安装包 (和 jiango 压缩包) 步骤二,安装python 配置python的环境变量 步骤三,安装djang 方式一:pip in ...
- Django学习笔记之表单验证
表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...
- Django学习手册 - 登录验证码
生成验证码函数 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = " ...
- Django学习手册 - ORM 数据创建/表操作 汇总
ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...
随机推荐
- http请求流程
- 遍历List过程中同时修改
public static void Main() { List<int> list = new List<int>(); ,,,,,,,,,}; list.AddRange( ...
- 微信小程序之自定义select下拉选项框组件
知识点:组件,animation,获取当前点击元素的索引与内容 微信小程序中没有select下拉选项框,所以只有自定义.自定义的话,可以选择模板的方式,也可以选择组件的方式来创建. 这次我选择了组件, ...
- Pyhton对象解释
python的docstring提供了对每一个类.函数.方法的解释,在他们的定义下面可以有一行Python的标准字符串,该行字符串需要和下面的代码一样的缩进. docstring可以用单引号(')或者 ...
- 关于Django启动创建测试库的问题
最近项目迁移到别的机器上进行开发,启动Django的时候,有如下提示: Creating test database for alias 'default' 其实这个可能是在Django启动按钮的设置 ...
- layui(八)——轮播图常见用法总结
carousel 是 layui 2.0 版本中新增的全新模块,主要适用于跑马灯/轮播等交互场景.它可以满足任何类型内容的轮播式切换操作,更可以胜任 FullPage (全屏上下轮播)的需求,简洁而不 ...
- putty-psftp
putty-psftp putty文上传下载 open hostname cd directory lcd directory put file get file Example: open 192. ...
- Golang入门教程(十二)安装注意事项
1.$GOPATH (1)go 命令依赖一个重要的环境变量:$GOPATH .注:这个不是Go安装目录 (2) (3) (4)git 安装 (5)包管理对应关系 (6)安装完之后bee 工具后,bee ...
- 细说tomcat之集群session共享方案
1. Tomcat Cluster官网:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.htmlTomcat原生支持的集群方案,通过组播消息 ...
- springboot(十九):SpringBoot+EHcache实现缓存
https://blog.csdn.net/qq_28143647/article/details/79789368