原理分析:

  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验证(二)的更多相关文章

  1. Django学习手册 - 基于requests API验证(一)

    验证需要知道requests提交数据的几种方式: GET 方式: # get 方式,传递数值可以直接通过url传递:(服务端接受 GET) requests.get(url='http://127.0 ...

  2. 六、Django学习之基于下划线的跨表查询

    六.Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码.反向查询例子反之. 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 resul ...

  3. 五、Django学习之基于对象的跨表查询

    五.Django学习之基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置.例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的 ...

  4. Django学习手册 - 权限管理(二)

    从数据库获取数据后,对数据进行清洗 目标: 数据1,存放至session 中的数据 数据2,显示至前端的菜单数据 清洗数据: 1.session存放的数据:(menu_leaf_dict) 2.前端菜 ...

  5. Django学习手册 - Form 插件

    """ 核心: from django import formsfrom django.forms import fieldsfrom django.forms impo ...

  6. Django学习手册 - 如何安装django 和 python ?

    整体步骤阐述:(windows环境下) 步骤一,下载python安装包 (和 jiango 压缩包) 步骤二,安装python 配置python的环境变量 步骤三,安装djang 方式一:pip in ...

  7. Django学习笔记之表单验证

    表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...

  8. Django学习手册 - 登录验证码

    生成验证码函数 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = " ...

  9. Django学习手册 - ORM 数据创建/表操作 汇总

    ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...

随机推荐

  1. (计算几何基础 叉积) nyoj68-三点顺序

    68-三点顺序 内存限制:64MB 时间限制:1000ms 特判: No通过数:27 提交数:43 难度:3 题目描述: 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断 ...

  2. cmd解压压缩包

    需要安装有winrar start winrar x C:\Users\systme\Desktop\xxx.rar c:\123

  3. 【简单易用的傻瓜式图标设计工具】Logoist 3.1 for Mac

    [简介] Logoist 是一款Mac上强大易用的傻瓜式图标设计制作工具,通过使用内置模板和预设效果,您可以立即创建高质量的图形内容和艺术作品.通过使用该应用程序,可用于制作图标LOGO. 一款用于创 ...

  4. UVA11527Unique Snowflakes(滑动窗口 + set判重 | | map)

    题意:输入长度为n的序列a,找到一个尽量长的连续子序列a[l] - a[r],使该序列中没有相同的元素 紫薯P239 序列元素从0开始编号,l 和 r 分别表示子序列左右端点,初始化为0,固定 l,判 ...

  5. MAC操作系统使用小技巧

    MAC操作系统使用小技巧   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改主机名名称 1>.修改主机名称 修改和查询的Ulinx命令如下: sudo scutil ...

  6. Java从resources文件夹读取配置文件

    列举了2种方式,第一种是绝对路径,就是写死路径,不推荐 第二种是相对路径,使用到了ClassLoader package com.StadyJava.day22; import java.io.Fil ...

  7. Selenium模块的使用

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏 ...

  8. python 面向对象(一)初识面向对象

    ##################################总结#################### 1. 面向过程:一切以事物的发展流程为中心 面向对象:一切以对象为中心,一切皆为对向, ...

  9. vue input添加回车触发

    普通vue input @keyup.enter="onSubmit" element el-input @keyup.enter.native="onSubmit&qu ...

  10. 深入浅出mybatis之入门使用

    写在前面 mybatis是一个持久层框架,可以支持SQL定制和存储过程,实现数据库记录到Java POJO对象之间的映射. 所以说,mybatis是一个ORM框架. 这个ORM可以通过2种方式实现:x ...