Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >django之基于requests API验证

django之基于requests API验证

作者头像
菲宇
发布于 2019-06-12 09:47:06
发布于 2019-06-12 09:47:06
1.3K00
代码可运行
举报
文章被收录于专栏:菲宇菲宇
运行总次数:0
代码可运行

验证需要知道requests提交数据的几种方式:

GET 方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# get 方式,传递数值可以直接通过url传递:(服务端接受 GET)
requests.get(url='http://127.0.0.1:8000/api/?k1=a1')

# get 方式也可通过参数 params:(服务端接受 GET)
requests.get(url='http://127.0.0.1:8000/api/',params={"K1":'a1'})

POST 方式:(在django中需要注意csrf)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
host_data = {
    'status' : True,
    "data":{
        "hostname":'a1.com',
        'disk':{'stuts':True,'data':'xxx1'},
        'ip':{'ipv4':'192.168.1.2'},
        'master':'xiaohua',
    }
}
# post 方式则通过data参数将数据传递(单层数据传递):(服务端接受 POST)
requests.post(url='http://127.0.0.1:8000/api/',data=host_data)

JSON方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# json 方式传递数据(多层嵌套数据,就必须用json形式传递)(服务端接受 BODY)
requests.post(url='http://127.0.0.1:8000/api/',json=host_data,)

# json 获取数据
# if request.method == 'POST':
#     info = json.loads(str(request.body, encoding='utf-8'))
#     print(info)

HEADERS 方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# headers 方式 也是可以传递数据的(服务端接受 META,had字段变更为 HTTP_HAD)
requests.post(url='http://127.0.0.1:8000/api/',headers={"had":'this request headers'},)

原理分析:

  API接口验证

  1.一个认证的key server端 和 client端都必须有这么一个认证key。

  2.认证登录的时间限定

  3.保存已验证的信息,在以后的验证不能再次登录

client 端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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':"2",'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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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")

1.建立views_api.py文件, 编写foo方法

from django.http import JsonResponse from django.core.paginator import Paginator ,PageNotAnInteger ,EmptyPage from django.views.decorators.csrf import csrf_exempt

def foo(req): return JsonResponse({'status': 0, 'msg': 'success'})

2.urls.py配置接口路径

from backend import views_api

urlpatterns = [ url(r'^api/', views_api.foo), ]

3.调用

访问: http://127.0.0.1:8000/api/foo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能
    其实微信支付有很多种形式,刷脸,扫码,APP支付,小程序支付等,这边只说明小程序支付的实现,不过原理上都大同小异。
用户9127725
2022/08/08
5910
mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能
CMDB学习之六 --客户端请求测试,服
客户端使用agent 请求测试,agent使用的POST 请求,使用requests模块
py3study
2020/02/10
5520
CMDB之数据采集
利用saltstack的salt.client模块可以在python的命令行下或者python脚本里执行相应的salt命令
超蛋lhy
2018/08/31
1.8K0
CMDB之数据采集
python requests
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
forxtz
2022/05/10
1.7K0
小朋友学Python Web(2):Get和Post请求
如果你要做一个App项目,比如iOS或安卓项目,这时App和后端的项目是分离的。 此时要发网络请求,可以采用Get方式,也可以采用Post方式。 这里先介绍Get方式。 新建client_get.py,模拟客户端的GET请求 client_get.py中的完整代码为
海天一树
2018/10/08
8180
小朋友学Python Web(2):Get和Post请求
python3+django2 开发易语言网络验证(中)
第四步:网络验证的逻辑开发 1.将model注册到adminx.py中 1.在apps/yanzheng目录下新建admin.py 文件,添加代码: import xadmin from xadmin import views from .models import Cards class BaseSetting(object): """ 引入更换主题功能 """ enable_themes = True use_bootswatch = True class
玩蛇的胖纸
2018/06/08
5.9K0
Python 接口测试requests.post方法中data与json参数区别
  在随笔分类Jmeter入门基础中,分享过一篇《Jmeter处理http请求Content-Type类型和传参方式》,这篇文章主要讲述Jmeter做接口测试时,针对POST请求参数的传递方式。而在使用requests做接口测试的时候,与之不太一样。requests.post主要参数是data与json,这两者使用是有区别的,下面我详情的介绍一下使用方法。
全栈测试开发日记
2023/02/02
1K0
Django 获取请求参数
  我们在使用python做接口测试的时候,通常使用的是requests库。而大家都知道还有一个request东西,很多人对requests与request两个东西傻傻分不清。下面我简单来介绍一下。
全栈测试开发日记
2023/02/02
2.9K0
Django 获取请求参数
python模块之requests及应用
Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。
菲宇
2019/06/12
1.6K0
python模块之requests及应用
Django框架学习(一)
1、POST/PUT/DELETE/PATCH访问一个url地址的时候才可以带请求体
小闫同学啊
2019/07/18
2.3K0
Django框架学习(一)
Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册
七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest_framework.authtoken
zhang_derek
2018/04/16
6.1K2
Django REST framework+Vue 打造生鲜超市(六)
		七、用户登录与手机注册
Python—requests模块详解
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
forxtz
2020/10/10
3.1K0
python3 django整理(九) django 接收参数,以json彼此传递post与get
HTTP没有要求,如果Method是POST数据就要放在BODY中。也没有要求,如果Method是GET,数据(参数)就一定要放在URL中而不能放在BODY中。
学到老
2019/01/25
3.8K0
python3 django整理(九)  django 接收参数,以json彼此传递post与get
使用Django2.0.4集成钉钉第三方扫码登录
    钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉开发平台:https://open-dev.dingtalk.com/
用户9127725
2022/08/08
6420
使用Django2.0.4集成钉钉第三方扫码登录
RESTful API
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。
用户1214487
2022/03/26
1.7K0
RESTful API
使用 Python 的 requests 库发送 POST 请求(data vs json 参数详解)
在使用 Python 进行 Web 开发时,经常需要通过 HTTP 请求与服务器进行数据交换。requests 是一个流行的 Python 库,用于发送 HTTP 请求。在使用 requests.post() 方法时,我们经常会遇到 data 和 json 两个参数,它们在传递数据时有着不同的用途和行为。本教程将详细介绍这两个参数的区别,并且通过实例演示如何在 Django Rest Framework 中处理这些数据。
IT蜗壳-Tango
2024/08/07
5.6K0
Django入门
Django是一个高级的Python Web框架,它支持快速开发和简洁实用的设计。这篇文章是看了Django官方文档并进行练习之后总结的笔记,主要总结入门需要了解的几个知识点:
玖柒的小窝
2021/10/06
1.5K0
Django入门
爬虫小白:03.requests的使用
安装:pip install requests 导包:import requests
见贤思齊
2020/08/05
1.3K0
requests+BeautifulSoup详解
简介 Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。 Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。 请求的
人生不如戏
2018/07/05
1.6K0
python requests模块
使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)
用户5760343
2019/07/27
1.4K0
相关推荐
mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验