Django项目记录(二)使用redis记录验证码

我们通过云片网把验证码发送给用户,验证码是随机的,如果我们不把验证码保存起来,那么用户在拿到我们的验证码进行验证的时候我们就不知道验证码是否正确,所以要把验证码下来保存。

  • 我们可以把全局变量定义在setting当中,但是这样我们重启Django变量就不存在了,而且随着验证码越来越多,内存消耗越来越大,

  • 使用数据库的话虽然第一个问题可以解决,也可以验证时间是否过期,可以写一个定时任务,但是这样增加我们的代码复杂度,

  • 因此就有了本文使用Redis,Redis是一个键值型数据库,我们在对Redis设置值的时候,可以给他设置一个过期时间,当这个时间过期的时候,Redis就会把过期的值自动清理,可以利用这个特性。Redis也被大量应用到web系统中解决我们的缓存问题中。

  • 首先先在GitHub上面搜索Redis windows把压缩包下载下来

  • 然后运行想应得文件,Redis之前有写过文章,大家可以去看看
    在这里插入图片描述

  • 这个窗口不要关,在打开另外一个窗口,启动测试一下
    在这里插入图片描述

  • 安装Python的redis驱动pip install redis

  • 在settings.py文件里面设置一下redis

# Redis设置
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
  • 然后我们来书写我们的view逻辑,核心代码如下
class SendSmsView(View):
    def post(self, request, *args, **kwargs):
        re_dict = {}
        # 取出表单里面的数据,详情看forms.py文件
        send_sms_form = forms.DynamicLoginForm(request.POST)
        if send_sms_form.is_valid():
            # cleaned_data用于读取表单提交的值
            mobile = send_sms_form.cleaned_data["mobile"]
            # 随机生成动态验证码
            code = generate_random(4, 0)
            re_json = send_single_sms(yunpian_api, code=code, mobile=mobile)
            if re_json['code'] == 0:
                re_dict["status"] = "success"
                # 验证码发送成功时用Redis来记录
                # 必须要加上charset="utf-8'以及decode_responses=True,否则Redis保存的是布尔类型
                r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset="utf8", decode_responses=True)
                r.set(str(mobile), code)
                # expire是用来设置验证码过期时间的
                r.expire(str(mobile), 60 * 5)  # 设置验证码五分钟过期
            else:
                re_dict["msg"] = "msg"

        else:
            # items将错误信息转化列表
            # from.errors其实就是一个字典, 可以利用for error in form.errors.values,
            # 或者for key,  value in form.errors遍历得到其中的数据
            for key, value in send_sms_form.errors.items():
                re_dict[key] = value[0]

        # 他会将我们的dict转成json传给我们的浏览器
        return JsonResponse(re_dict )

因为这里用到了form.py文件,所以这里给出

from django import forms
from captcha.fields import CaptchaField


class LoginForm(forms.Form):
    username = forms.CharField(required=True, min_length=2)
    password = forms.CharField(required=True, min_length=3)

class DynamicLoginForm(forms.Form):
    mobile = forms.CharField(required=True, max_length=11, min_length=11)
    captcha = CaptchaField()

接收验证码的表单的login.html代码还没有完善好,后续给出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Redis使用教程可以通过以下几个步骤来实现: 1. 首先,你可以使用两种思路来使用Redis缓存:使用Django模块(如django-redisdjango-redis-cache)或直接使用Redis包操作Redis使用Django模块可以让你使用内置缓存模块的接口,但如果你不需要使用这些接口,也可以直接使用Redis包。 2. 在安装Redis之前,你可以参考一些文章,例如"linux下redis的安装与django-redis使用方法",以了解如何在Linux环境下安装Redis使用django-redis。 3. Django本身不支持Redis作为缓存,但你可以使用上面提到的redis库或专门的django-redis库来添加对Redis的支持。下面简单介绍一下django-redis使用方法: - 首先,通过pip安装django-redis库。 - 在Django的settings.py文件中添加以下配置信息: ```python CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } } } ``` 这个配置将使用Redis作为默认的缓存后端,并指定了Redis的连接地址和数据库编号。 - 在你的代码中,可以通过以下方式来使用Redis缓存: ```python from django.core.cache import cache # 设置缓存 cache.set('key', 'value', timeout=3600) # 获取缓存 value = cache.get('key') # 删除缓存 cache.delete('key') ``` 通过以上步骤,你可以成功地使用DjangoRedis进行缓存操作。希望这些信息能对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Django使用 Redis 缓存](https://blog.csdn.net/hj1993/article/details/129570612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Redis的基础与django使用redis](https://blog.csdn.net/m0_54853420/article/details/126114001)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值