django - 如何使用验证码对 Django 会话进行身份验证?
问题描述
我已经建立了一个网站和一个验证码。验证码由模型生成并显示在模板上。
意见
from resumesite.models import Chess_board
import json
def home(request):
return render(request, 'home.html', {})
def chess(request):
board = Chess_board()
data = mark_safe(json.dumps(board.rep))
return render(request, 'captcha_original.html',{'board': data})
我想将所有请求重定向到验证码,并在验证码完成后重定向到网站并允许在会话期间完全访问(即 20 分钟)。你会如何建议这样做?
选项
- 通过 ip 地址进行身份验证的中间件/装饰器(我已经阅读过,如果用户使用代理,这将不起作用)
- 自定义登录表单,带装饰器
@login_required(login_url="/chess/")
- 与 REST 集成并使用令牌身份验证
解决方案
您必须使用服务器端会话来处理访问。通过使用服务器端会话,您可以设置到期时间。在会话存储中,有一个名为 access=True 的变量,您可以在其他函数中检查它是否存在并提供页面。到期时间到达后,此会话将被删除,函数将看到 None 值。有关更多信息,请阅读以下文档 https://docs.djangoproject.com/en/3.0/topics/http/sessions/#configuring-the-session-engine
推荐阅读
- android - Android 应用程序在没有堆栈的情况下崩溃:如何调试?
- javascript - 如何将本地存储项目从 Cordova 应用程序持久保存到手机?
- node.js - mongoose 文档值可以是函数吗?
- qt-creator - 尝试在 qt creator 上运行项目时出现 [makefile:36:debug] Error1 错误
- windows - 如何在脚本中读取 Windows 7 上的通知栏?
- gcc - gcc 不会编译为可执行文件
- javascript - 将对象数组中的所有数据汇总到新的对象数组中
- python - 如何在 SymPy 中收集分数?
- java - 如何在 Java 中使用 MDC 日志记录
- azure-blob-storage - 将 *IPFS* 安装到 blob 存储