flask使用redis

article/2025/10/24 22:17:26

文章目录

  • 前言
  • 一、环境
  • 二、使用步骤
    • 1.安装redis
      • 1.下载
      • 2.运行
    • 2.安装并使用redis包
      • 1.安装
      • 2.使用
  • 运行


前言

有人会有疑问,不是已经连上了mysql数据库了吗,为什么还要用redis数据库?有时候用户访问网页的时候,会产生一些临时性的数据,如验证码等,如果使用mysql存储,那么还要另外新建一张表,还要定时清理表中的验证码,使用mysql操作太麻烦了。正好redis可以解决这个问题,下面通过生成验证码的例子来学习一下。


一、环境

python 3.7
flask 2.0.2

二、使用步骤

本篇博客代码接着上篇博客flask使用装饰器继续写,文件目录如下
在这里插入图片描述

1.安装redis

1.下载

因为我使用windows系统,所以用的redis的windows版本,下载地址:https://github.com/tporadowski/redis/releases,打不开的也可以在百度云里下:https://pan.baidu.com/s/14XhuWY8W54iUbNZNk7MJcQ ,提取码:1z12。
下载完之后解压即可。
里面的文件如下:
在这里插入图片描述

2.运行

用cmd打开对应目录,输入命令运行redis服务器:

redis-server

看到下图说明redis运行成功
在这里插入图片描述
再输入命令运行redis客户端(之前的cmd窗口不要关,另开一个cmd窗口):

redis-cli

运行结果:
在这里插入图片描述
自此,redis准备完成。

2.安装并使用redis包

1.安装

python有专门操作redis的包,先下载:

pip install redis

2.使用

先在config.py添加redis的配置信息
config.py

from flask_teach.common import random_num# 配置信息类
class Config(object):......# 加了这两句,redis配置信息,主机地址和端口号REDIS_HOST = '127.0.0.1'REDIS_PORT = 6379

之后在flask_teach下的__init__.py里面创建一个redis对象:
flask_teach/init.py

# 加了这句,引入redis
from redis import StrictRedisfrom config import Config......# 加了这句,创建redis对象
redis_store = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT, decode_responses=True)......# 创建app
def create_app():......

再在test目录下的views.py编写验证码生成视图:
test/views.py

from flask import request, render_template, redirect, session, url_for, jsonifyfrom . import test_bluefrom flask_teach import db, models, redis_store
from flask_teach.common import random_num......# 返回验证码
@test_blue.route('/valid_code')
def valid_code():# 获取数据phone = request.args.get('phone')print(phone)try:# 生成四位随机数字字母作为验证码code = random_num(4)# 将验证码保存到redis中,第一个参数是key,第二个参数是value,第三个参数表示60秒后过期redis_store.set('valid_code:{}'.format(phone), code, 60)# 这里用输出验证码来代替短信发送验证码print(code)return jsonify(status="成功", msg="验证码发送成功")except Exception as e:return jsonify(status='失败', msg="验证码发送失败")

为了使用验证码,原来的登录视图和login.html也要做些修改:
登录视图:

from flask import request, render_template, redirect, session, url_for, jsonifyfrom . import test_bluefrom flask_teach import db, models, redis_store
# 引入装饰器
from flask_teach.decorators import decorator_login
from flask_teach.common import random_num# 登录视图
@test_blue.route('/login', methods=['POST', 'GET'])
def login():content = {'data': '','msg': ''}# 根据请求方式的不同返回不同结果if request.method == 'GET':return render_template('test/login.html', content=content)else:# 获取传过来的表单数据name = request.form['name']     # 用户名password = request.form['password']     # 密码phone = request.form['phone']       # 电话号码val_code = request.form['valid_code']   # 验证码# 获取保存在redis里面的验证码redis_code = redis_store.get('valid_code:{}'.format(phone))# 验证码校验不通过# 判断验证码是否过期if not redis_code:msg = '验证码已过期'# 判断验证码是否错误elif val_code.lower() != redis_code.lower():msg = '验证码错误'# 验证码校验通过,开始查找用户信息elif val_code.lower() == redis_code.lower():# 查找对应用户test = models.Test.query.filter_by(name=name).first()# 用户存在,比较密码if test:# 密码正确,登录成功,跳转到首页if test.password == password:# 将用户名存到session中,方便后面使用session['name'] = name# 重定向到首页return redirect('/test/index')# 用户不存在或者密码错误返回错误信息return '用户名不存在或者密码错误'content = {'data': request.form,'msg': msg}return render_template('/test/login.html', content=content)

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title><!-- 引入jquery --><script src="../../static/js/jquery-3.6.0.min.js"></script>
</head>
<body>
<form action="/test/login" method="post">用户名:<input type="text" name="name" value="{{content.data.name}}"><br>密码:<input type="password" name="password" value="{{content.data.password}}"><br>手机号:<input type="text" name="phone" id="phone" value="{{content.data.phone}}"><br>验证码:<input type="text" name="valid_code" id="valid_code">{{content.msg}}<input type="button" id="get_valid_code" value="获取验证码"><br><input type="submit" value="登录">
</form>
<script>$(function(){// 监听获取验证码按钮点击$('#get_valid_code').click(function () {var btn = $(this);// 获取手机号let phone = $('#phone').val();// 有手机号才能获取验证码if(phone){// 使验证码按钮不可点击btn.prop('disabled', true);// 发送请求,后端模拟向对应手机号发送验证码$.ajax({// 请求方式type: 'GET',// 请求媒体类型contentType: 'application/json;charset=UTF-8',// 请求地址url: 'http://127.0.0.1:5000/test/valid_code?phone=' + phone,// 请求成功success: function (result) {alert(result.msg)},// 请求失败,包含具体错误信息error: function (e) {alert(e.status);alert(e.responseText);}})// 倒计时秒数var sec = 60;// 创建定时器对象var timer = setInterval(function () {// 秒数大于0,继续倒计时if(sec>0) {console.log($(this));btn.val(String(sec) + '秒后再次发送');sec--;}else{// 秒数小于0,重置秒数,使验证码按钮可以点击,并且清除定时器,使秒数不再倒计时sec = 60;btn.val('获取验证码');btn.prop('disabled', false);// 清除定时器clearInterval(timer);}}, 1000);}else{alert("请输入手机号!!!")}})})
</script>
</body>
</html>

注意:login.html里面用了jquery,要自己下载,下载地址https://jquery.com/download/,推荐下载下图的。点击了之后,打开的时候是一个网页(反正我是这样),自己新建一个js文件,再把里面的代码复制粘贴到自己的js文件即可。
在这里插入图片描述
我的js放置的目录,static文件中必须在这个位置,否则找不到。或者改static_folder文件。
在这里插入图片描述

运行

点击发送验证码:
在这里插入图片描述
到后台查看输出的验证码:
在这里插入图片描述
输入验证码后点击登录:
在这里插入图片描述
在redis里面也能看到对应验证码:
在这里插入图片描述
60秒后再次查找就找不到了:
在这里插入图片描述
再次输入验证码登录显示已过期:在这里插入图片描述
大功告成,有什么问题欢迎在评论区留言。

下一篇博客flask文件上传文件


http://chatgpt.dhexx.cn/article/jyou18rJ.shtml

相关文章

最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景-2022年最新Redis图解安装

最新版本Redis&#xff1a;Redis 7.0 安装使用&#xff0c;编译安装Redis&#xff0c;Redis使用场景。 本章主要目标&#xff1a; 1.Redis介绍 2.下载Redis&#xff0c;编译安装Redis 3.启动Redis使用 4.Redis常用数据类型 5.使用场景介绍 下面开始本章内容的学习 1.Redi…

TP5 使用redis

1.打开tp5官方手册&#xff0c;在缓存下面找到使用多个缓存类型 粘贴以下代码到tp框架config下面的缓存设置下 // 切换到redis操作 Cache::store(redis)->set(name,value);//获取redis Cache::store(redis)->get(rename); //实现redis 消息队列 在 /thinkphp/library/t…

C#使用Redis

Redis是一种key-value型数据库与非持久化数据,用来存于频繁操作的数据&#xff0c;与Sqlserver、Mysql等关系型数据库有着很大的区别&#xff0c;如Redis存储的数据结构不相同&#xff0c;还有Redis数据存于内存中&#xff0c;它也与Mongodb、Azure Cosmos Db、Azure TableStor…

springboot使用redis

springboot使用redis redis-service.exe : 服务端,启动后不要关闭 redis-cli.exe : 客户端,访问redis中的数据 redisclient-win32.x86_64.2.0.jar : redis的图形界面客户端,执行方式是在这个文件的目录执行 java -jar redisclient-win32.x86_64.2.0.jar或者在这个jar包的目录…

springboot集成redis使用注解

redis简介&#xff1a; Redis是当前比较热门的NOSQL系统之一&#xff0c;它是一个开源的使用ANSI c语言编写的key-value存储系统 &#xff08;区别于MySQL的二维表格的形式存储。&#xff09;。和Memcache类似&#xff0c;但很大程度补偿了Memcache的不 足。和Memcache一样&am…

Another Redis使用手册

Another Redis DeskTop Manager 跨平台、免费的redis可视化工具&#xff0c;完胜Redis DeskTop Manager。 下载地址&#xff1a;https://github.com/qishibo/AnotherRedisDesktopManager 界面、排版引起极度舒适&#xff0c;只是命令行的入口相对隐蔽&#xff0c;在此截图标出…

Redis使用认证密码登录

Redis默认配置是不需要密码认证的&#xff0c;也就是说只要连接的Redis服务器的host和port正确&#xff0c;就可以连接使用。这在安全性上会有一定的问题&#xff0c;所以需要启用Redis的认证密码&#xff0c;增加Redis服务器的安全性。 1. 修改配置文件 Redis的配置文件默认…

Redis使用密码登录

&#xff08;1&#xff09;进入redis客户端安装目录&#xff1a; &#xff08;2&#xff09;输入命令&#xff1a;redis-cli.exe -h 主机号 -p 端口号 如&#xff1a;redis-cli.exe -h 127.0.0.1-p 6379 &#xff08;3&#xff09;输入密码命令&#xff1a;auth 密码 若显示…

thinkphp5 redis使用

服务器必须要安装redis 我是通过宝塔安装的redis 不过也可以通过命令安装 测试安装成功 进入redis redis-cli 查看密码 config get requirepass 设置密码 config set requirepass “123456” 使用redis有两种方式 第一种是使用php里面的redis扩展&#xff08;需要对服务器上…

redis使用详解

一.redis简介 redis是开源的BSD许可的高级key/valu存储系统&#xff0c;用于存储String&#xff0c;list&#xff0c;hash&#xff0c;set&#xff0c;zset&#xff0c;常用来提供数据结构服务。 redis与memcached比较 1.redis可以用来做存储storage&#xff0c;memcached只用来…

Redis基本使用!

目录 1.基本概念&#xff1a; 1.Redis的安装和启动 下载 目录结构 3.Redis的命令&#xff08;重点&#xff09; Redis数据结构 1.String字符串&#xff08;重点&#xff09; 2.Hash哈希(重点) 3.Set集合 4.ZSet集合 通用命令 4.Jedis的基本使用(了解) 相当于JDBC Jedi…

人工智能的几个研究方向

人工智能主要研究内容是&#xff1a;分布式人工智能与多智能主体系统、人工思维模型、知识系统、知识发现与数据挖掘、遗传与演化计算、人工生命、人工智能应用等等。 其中热门研究有以下几种。 一、计算机视觉 就包括图像识别&#xff0c;视频识别&#xff0c;具体应用有人…

学习人工智能可以从事哪些职业,有哪些就业前景和薪资待遇?

学习人工智能可以从事的职业非常广泛&#xff0c;就业前景非常广阔&#xff0c;随着人工智能技术的不断发展和应用&#xff0c;人工智能相关职位的需求将会越来越大。以下是一些主要的职业方向&#xff1a; 学习人工智能可以从事哪些职业&#xff0c;有哪些就业前景和薪资待遇&…

人工智能机器人专业就业前景怎样

在大数据时代&#xff0c;人工智能的相关技术越来越受到关注&#xff0c;人工智能产品的市场话语权也越来越大。因此&#xff0c;许多科技公司已经开始在人工智能领域实施战略布局。人工智能的就业前景如何&#xff1f;让我们来看看吧&#xff01; 第一&#xff1a;智能化是未来…

学人工智能就业前景怎么样?学AI有前途吗?

学习人工智能已经成为了当前热门的趋势。由于人工智能的技术应用越来越广泛&#xff0c;因此&#xff0c;学习人工智能的前景非常广阔。以下是学习人工智能就业前景的一些解释&#xff1a; 学人工智能就业前景怎么样&#xff1f; 市场需求 近年来&#xff0c;人工智能技术的应…

人工智能行业,就业方向和研究领域的简单介绍

人工智能行业&#xff0c;目前的就业方向&#xff0c;主要分为搜索、图像处理、计算机视觉、模式识别和图像处理等等&#xff0c;具体如下&#xff1a; 搜索方向 &#xff1a;百度、谷歌、微软、yahoo等&#xff08;包括智能搜索、语音搜索、图片搜索、视频搜索等都是未来的就业…

2022年了人工智能就业前景越来越严峻了,你还在坚持吗?

现在的人工智能只能算是大餐前的甜点&#xff0c;真正的大餐还没开始。所以现在就是好好学习&#xff0c;修炼内容的时候&#xff0c;等到时机成熟&#xff0c;自己的发展也自然会迈上另一个台阶。 像ai作画&#xff0c;之前知乎热搜很难不爱&#xff0c;这个是真的会替代人工…

人工智能就业指南

目录 AI革命进行时 人工智能的未来 人工智能应用于哪些核心产业领域 人工智能领域的拓展对就业的影响 人工智能领域最热门就业机会 人工智能工程师需要做什么 十大AI技能 招聘人工智能专业人员的顶级公司 规划你的AI学习路径 AI革命进行时 过去几年里&#xff0c;数字…

人工智能就业前景如何?

随着5 G、人工智能等技术的发展&#xff0c;人工智能行业的发展趋势也越来越明朗&#xff0c;那么人工智能就业前景如何呢&#xff1f;随着技术的不断发展和成熟&#xff0c;人工智能会带来很多行业变革&#xff0c;我们来了解一下人工智能在各行各业中会有哪些新应用或者新方向…

研究生人工智能就业没烦恼?一文了解研究生AI就业前景

人工智能&#xff0c;现在已被国家列入发展规划&#xff0c;国家提出了人工智能三步走的发展战略&#xff0c;现工智能已经有了国家战略的背景支持。因此&#xff0c;在今后的发展当中&#xff0c;肯定是会越来越火热。 根据领英发布的全球人工智能人才分布显示&#xff0c;中…