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(查询结果集对象),它 ...
随机推荐
- operator new和operator delete
从STL源码剖析中看到了operator new的使用 template<class T> inline void _deallocate(T* buffer) { ::operator ...
- Mac下如何生成SSH Key-使用GitLab
步骤1.检查是否已经存在SSH Key 打开电脑终端,输入以下命令: ls -al ~/.ssh 会出现两种情况 步骤2. 生成/设置SSH Key 继续上一步可能出现的情况 (1)情况一:终端出现文 ...
- JS学习笔记Day7
一.ES5扩展方法 1.严格模式"use strict" 1)必须加在作用域的开头 2.数组扩展方法 1)indexOf(元素,从哪个下标开始查找) 作用:在数组中查找指定的元素第 ...
- (矩阵快速幂)HDU1575 Tr A
Tr A Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- POE 供电
受电设备(PD)和供电设备(PSE) 标准的五类网线有四对双绞线但是在10M BASE-T和100M BASE-T中只用到其中的两对.IEEE80 2.3af允许两种用法: 1.应用空闲脚供电时4.5 ...
- db mysql / mysql cluster 5.7.19 / my.cnf / thread_pool_stall_limit
s MYSQL Thread Pool简介 在MySQL5.5中,MySQL为每一个数据库连接创建一个线程,并分配其所需要的所有内存,当数据库连接数较大,或者有多个并发同时请求数据库连接时,服务器需要 ...
- C# enum、int、string三种类型互相转换
enum.int.string三种类型之间的互转 #代码: public enum Sex { Man=, Woman= } public static void enumConvert() { in ...
- VSCode 配置
官网 https://code.visualstudio.com/ 便携化 Windows,Linux 在 Code.exe 所在目录创建 data 目录 macOS 在 Code.exe 所在目录创 ...
- java.io.OutputStream & java.io.FileOutputStream
java.io.OutputStream & java.io.FileOutputStream 1.Java.io.OutputStream(字节输出流) 字节输出流,这是一个抽象类,是表示输 ...
- Django路由层
路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...