接口的login 登录

  • 使用 Django 中的 auth 认证 因为之前合并了 django 的 用户表 创建的 用户 密码 会在内部进行加密 不知道加密方式所以要使用 authenticate 来进行判断

  • 使用 APIView 自定义一个 视图

导入 认证
from django.contrib.auth import authenticate 使用 自带的 认证来判断用户名跟密码
class LoginView(APIView):
def post(self, request):
res_obj = MyResponse() # 使用自定义的 响应对象
username, password = request.data.get('username'), request.data.get('password')
auth_obj = authenticate(username=username,password=password)
if auth_obj:
res_obj.data = '登陆成功!'
else:
res_obj.data = '账号或密码错误!'
# logger.debug(request.data)
return Response(res_obj.dict)
  • 可以使用邮箱登录

    from django.contrib.auth import authenticate, login, logout
    from django.contrib.auth.backends import ModelBackend
    from django.db.models import Q
    from models import UserProfile # 让用户可以用邮箱登录
    # setting 里要有对应的配置
    class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
    try:
    user = UserProfile.objects.get(Q(username = username) | Q(email=username))
    if user.check_password(password):
    return user
    except Exception as e:
    return None
    复制代码
    记得引入models中创建的表 # AUTH 方法(支持邮箱登录)
    AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',)

级验科技滑动验证

  1. 注意官方文档 学习使用 SDK 并下载 匹配使用 的 SDK

  2. 后端 创建 对应的 返回 初始化滑动验证 的 json 数据

    from django.shortcuts import HttpResponse
    # 从 SDK的 \gt3-python-sdk-master\sdk 中 查找 工具类
    from utils.geetest import GeetestLib # 请在官网申请ID使用,示例ID不可使用
    pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
    pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4" # 页面初始化时请求的 数据
    def pcgetcaptcha(request):
    user_id = 'test'
    gt = GeetestLib(pc_geetest_id, pc_geetest_key)
    status = gt.pre_process(user_id)
    # 前后端分离的 项目 永不到
    # request.session[gt.GT_STATUS_SESSION_KEY] = status
    # request.session["user_id"] = user_id
    response_str = gt.get_response_str()
    return HttpResponse(response_str)
  3. 从前端 接收 对应的 数据

    //  导入 必须的js文件  从sdk 文档中 查找
    import '@/assets/js/gt' created() {
    this.$axios.get('/pcgetcaptcha/')
    .then((res) => {
    console.log(res);
    //请检测data的数据结构, 保证data.gt, data.challenge, data.success有值
    let data = res.data;
    initGeetest({
    // 以下配置参数来自服务端 SDK
    gt: data.gt,
    challenge: data.challenge,
    offline: !data.success,
    new_captcha: true,
    // product: 'popup', // 选项: float、popup、custom、bind
    }, function (captchaObj) {
    // 这里可以调用验证实例 captchaObj 的实例方法
    captchaObj.appendTo("#captchaBox");
    //将验证按钮插入到宿主页面中captchaBox元素内 id 选择器
    })
    })
    },
  4. 二次 验证 前端 发送 登录请求 并且携带着 滑动验证的 参数

    注意:

    • validateResult 是包存在 组件中的 data 数据 在 通过滑动验证时执行的函数 需要注意 this 的指向问题 通过 在 外部定义变量来保存 this 对象
    methods: {
    // 登录的 点击按钮
    login_btn() {
    this.$axios.post('/login/', {
    username: this.username,
    password: this.password,
    // 滑动验证 相应的 参数
    geetest_challenge: this.validateResult.geetest_challenge,
    geetest_validate: this.validateResult.geetest_validate,
    geetest_seccode: this.validateResult.geetest_seccode,
    })
    .then((res) => {
    if (res.data.code === 0) {
    this.$router.push({name: 'home'})
    } else {
    alert(res.data.error)
    }
    })
    }
    },
    created() {
    this.$axios.get('/pcgetcaptcha/')
    .then((res) => {
    // 定义变量 保存 this 指向
    let base = this;
    //请检测data的数据结构, 保证data.gt, data.challenge, data.success有值\
    let data = res.data;
    initGeetest({
    // 以下配置参数来自服务端 SDK
    gt: data.gt,
    challenge: data.challenge,
    offline: !data.success,
    new_captcha: true,
    // product: 'popup', // 选项: float、popup、custom、bind
    }, function (captchaObj) { // 这里可以调用验证实例 captchaObj 的实例方法
    //将验证按钮插入到宿主页面中captchaBox元素内 id 选择器
    captchaObj.appendTo("#captchaBox");
    captchaObj.onReady(function () {
    // 加载完验证控件之后 执行
    }).onSuccess(function () {
    // 验证成功之后 执行
    let result = captchaObj.getValidate();
    console.log(result);
    base.validateResult = result;
    }).onError(function () {
    // console.log(3333)
    //your code
    }) }) })},
  5. 在视图中 接收 用户信息 以及 滑动验证的 数据

    class LoginView(APIView):
    def post(self, request):
    res_obj = MyResponse()
    # 用于滑动验证
    gt = GeetestLib(pc_geetest_id, pc_geetest_key)
    challenge = request.data.get(gt.FN_CHALLENGE, '')
    validate = request.data.get(gt.FN_VALIDATE, '')
    seccode = request.data.get(gt.FN_SECCODE, '')
    status = True # 前后端分离 没有session 数据 改为 True
    if status:
    # 通过 级验科技验证
    result = gt.success_validate(challenge, validate, seccode, None)
    else:
    # 通过本地验证
    result = gt.failback_validate(challenge, validate, seccode)
    if result: # 判断是否是真人 还是爬虫
    # 常规用户登录的 数据验证
    username, password = request.data.get('username'), request.data.get('password')
    auth_obj = authenticate(username=username,password=password)
    if auth_obj:
    res_obj.data = '登陆成功!'
    else:
    res_obj.error = '账号或密码错误!'
    res_obj.code = 1
    else:
    # 滑动验证不通过
    res_obj.code = 1
    res_obj.error = '必须通过滑动验证!'
    return Response(res_obj.dict)

DRF 中使用 级验科技滑动验证的更多相关文章

  1. Django中使用极验Geetest滑动验证码

    一,环境部署 1.创建一个django测试项目 此处省略... 二,文档部署 1.下载安装python对应的SDK 使用命令从Github导入完整项目:git clone https://github ...

  2. Django中使用geetest实现滑动验证

    下载第三方模块 导入模块social-auth-app-django 和geetest 提前去官网下载gt.js或者引入http://static.geetest.com/static/tools/g ...

  3. Vue(7)- vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一.vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/vu ...

  4. vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一 . vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/ ...

  5. 滑动验证的设计与实现J2EE

    滑动验证的设计与实现J2EE 注:本博文为博主原创,转载请注明出处. 项目源码地址:https://github.com/zhangxy1035/Verify 本篇博文的主要目录如下: 一.项目简介二 ...

  6. 在AspNetCore中使用极验做行为认证

    先上效果图 极验的流程 极验官方文档地址 https://docs.geetest.com/install/deploy/server/csharp 简单说明一下极验的验证流程 引用官方的图片 向服务 ...

  7. C# Selenium 破解腾讯滑动验证

    什么是Selenium? WebDriver是主流Web应用自动化测试框架,具有清晰面向对象 API,能以最佳的方式与浏览器进行交互. 支持的浏览器: Mozilla Firefox Google C ...

  8. DRF中的序列化器

    DRF中的序列化器详细应用   视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...

  9. day 88 Vue学习之八geetest滑动验证

      本节目录 一 geetest前端web中使用 二 xxx 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 geetest前端web中使用 下载gt文件,官网地址,下面我 ...

随机推荐

  1. 【Java每日一题】20170206

    20170120问题解析请点击今日问题下方的“[Java每日一题]20170206”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...

  2. Field 'id' doesn't have a default value错误解决方法

    Field 'id' doesn't have a default value 错误提示. 主键类型获取方式为"native"由数据库生成指定. 检查发现数据库中已存在Employ ...

  3. Java编程思想__异常

    1.使用异常链,需要采用如下方式包装捕获到的异常: public void two() { System.out.println("two()"); try { one(); } ...

  4. 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows(01分数规划)

    题意 题目链接 Sol 复习一下01分数规划 设\(a_i\)为点权,\(b_i\)为边权,我们要最大化\(\sum \frac{a_i}{b_i}\).可以二分一个答案\(k\),我们需要检查\(\ ...

  5. Mysql 常用数据类型

    double:浮点型,double(5,2) 表示最多5位,必须包含两位小数,最大值是 999.99 char:定长字符串类型,char(10) 表示必须放 10 的字节,没有就用空格补充 varch ...

  6. Mybatis 同时传入多个参数和对象

    流程 1,mapper 接口文件使用 @param 注解(一个参数就不用使用注解,多个参数要么使用注解,要么使用数组的方式取值) 2,mapper xml 文件使用 mapper 接口文件传参 pub ...

  7. Duplicate entry '0' for key 'PRIMARY'

    一般使用ORM时,提交新增实体时, mysql会出现此错误:Duplicate entry '0' for key 'PRIMARY' 原因是插入语句,未提供主键的值,且主键是非自增长的. 解决办法是 ...

  8. 利用Syslog Watcher在windows下部署syslog日志服务器

    1.概述 syslog协议是各种网络设备.服务器支持的网络日志记录标准.Syslog消息提供有关网络事件和错误的信息.系统管理员使用Syslog进行网络管理和安全审核. 通过专用的syslog服务器和 ...

  9. 14.Odoo产品分析 (二) – 商业板块(7) –制造(1)

    查看Odoo产品分析系列--目录 一旦你收到了库存中所需的原材料,就可以开始生产终端产品了.ERP系统的部分功能是帮助您根据可用资源调度这些订单.其中一项资源是原产品.其他资源可以包括可用劳动力或特定 ...

  10. Android为TV端助力 计算每个目录剩余空间丶总空间以及SD卡剩余空间

    ublic class MemorySpaceCheck { /** * 计算剩余空间 * @param path * @return */ public static String getAvail ...