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(查询结果集对象),它 ...
随机推荐
- 实现迁徙学习-《Tensorflow 实战Google深度学习框架》代码详解
为了实现迁徙学习,首先是数据集的下载 #利用curl下载数据集 curl -o flower_photos.tgz http://download.tensorflow.org/example_ima ...
- python自动化开发-[第二十二天]-bbs多级评论、点赞、上传文件
今日概要: 1.related_name和related_query_name的区别 2.through_fields的用途 3.django的事务提交 4.点赞的动画效果 5.多级评论的原理 6.上 ...
- Spring_xml和注解混合方式开发
1. spring核心配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...
- HDFS集群常见报错汇总
HDFS集群常见报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DataXceiver error processing WRITE_BLOCK operation 报 ...
- Maven 本地资源库配置
Maven 本地资源库配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统环境 1>.查看操作系统环境(总共3台虚拟机) 2>.关闭防火墙并禁用开机自启动( ...
- 安装saltstack使用的shell
sed -i 's/^#//g' /etc/yum.repos.d/centos6.8.repo sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d ...
- HDFS 上文件块的副本数设置
一.使用 setrep 命令来设置 # 设置 /javafx-src.zip 的文件块只存三份 hadoop fs -setrep /javafx-src.zip 二.文件块在磁盘上的路径 # 设置的 ...
- plus初始化原理及plus is not defined,mui is not defined 错误汇总
原文 关于plus是哪里来的问题 plus是5+Runtime的内部对象.就像chrome浏览器里有chrome.开头的一些对象方法,5+runtime内部内置了plus对象.因为plus和mui不一 ...
- Django基于正则表达式匹配URL
在Django1.X中,是这样匹配的. 在Django2.X中,是这样匹配的. Django2.X中开始需要用re_path模块进行正则表达式匹配了,太JB坑了,卡了好久这个问题,最后还是问群里面的高 ...
- java深copy (伪深copy)【原】
Teacher.java package test.clone; /** * 老师 * 深copy需要实现Cloneable接口 * @author King * */ public class Te ...