1.settings

CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.8.102:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.8.102:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"sms_code": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.8.102:6379/15",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
} # 保存 session数据到 Redis中
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session" APPEND_SLASH=False

2.urls.py

    url(r'^check_sms.html', sms.check_sms,name="check_sms"),
url(r'^sms.html', sms.sms, name="sms"),

3.html

# check_sms.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>sms</title>
<script src="/static/plugins/jquery.min.js"></script>
<script> </script>
</head>
<body>
<form action="{% url 'check_sms' %}" method="post">
手机号:<input id="phone_num" type="text" name="phone_num" value="{{ phone }}" style="color: red" readonly="true"><span style="color: #761c19"></span>
<p></p>
密&nbsp;&nbsp;&nbsp;码:<input id="check_code" type="text" name="passwd" placeholder="请输入密码"><span style="color: #761c19"></span>
<p></p>
<input type="submit" value="登录" class="log">
{{ cookie_content }}
{{ session_content }}
{{ is_login }}
{{ username }}
{% csrf_token %}
</form> </body>
</html> # sms.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>sms</title> </head>
<body>
<form action="{% url 'sms' %}" method="post">
手机号:<input id="phone_num" type="text" name="phone_num" placeholder="请输入手机号"><span style="color: #761c19"></span>
<p></p>
密&nbsp;&nbsp;&nbsp;码:<input id="check_passwd" type="text" name="passwd" placeholder="请输入密码">&nbsp;&nbsp;<span style="color: red"></span>
<p></p>
验证码:<input id="code" type="text" name="code" placeholder="请输入验证码">&nbsp;&nbsp;<span style="color: red">{{ code }}</span>
<p></p>
<input type="submit" value="注册" class="reg">
{{ cookie_content }}
{{ session_content }}
{{ is_login }}
{{ username }}
{% csrf_token %}
</form> </body>
</html>

4.视图 sms.py

'''
# sms_code.py
#!/usr/bin/python env
# coding:utf-8 import random
def code(num=4):
res = ""
for i in range(num):
# 数字0-9
num1 = str(random.randint(0, 9))
# 大写字母A-Z
# a = chr(random.randint(65, 90))
# 小写字母a-z
# b = chr(random.randint(97, 122))
# res += random.choice([num1, b])
res += random.choice([num1])
return res
''' #!/usr/bin/python env
# coding:utf-8
from exta_function import redis_con
from django.shortcuts import redirect, render, HttpResponse
from django_redis import get_redis_connection
from exta_function import sms_code
import json def sms(request):
if request.method == "GET":
code = sms_code.code(6)
request.session["code"] = code
return render(request, "sms/sms.html", locals())
elif request.method == "POST":
phone_num = request.POST.get("phone_num")
phone_num1 = "sms_" + str(phone_num)
passwd = request.POST.get("passwd")
code = request.POST.get("code")
conn = get_redis_connection("sms_code")
keys = conn.keys(phone_num1)
if keys:
return HttpResponse("用户已注册过!") elif request.session.get("code") == code:
# 注册功能
# 手机号 有效期 密码
# reids 存储数据格式 SETEX sms_18501020304 300 323242
conn = get_redis_connection("sms_code")
key = "sms_" + str(phone_num)
t = 600
val = passwd
conn.setex(key, t, val)
request.session["is_login"] = "true"
request.session['username'] = 'wangwu'
request.session["phone"] = phone_num
session_content = request.session
cookie_content = request.COOKIES
print(conn.get(key).decode("utf-8"))
return redirect("check_sms.html")
else:
return HttpResponse("验证码错误") def check_sms(request):
if request.method == "GET":
code = sms_code.code(6)
phone = request.session["phone"]
return render(request, "sms/check_sms.html", locals())
elif request.method == "POST":
# 验证功能 phone_num check_code
phone_num = request.POST.get("phone_num")
passwd = request.POST.get("passwd")
code = request.session["code"]
key = "sms_" + str(phone_num) conn = get_redis_connection("sms_code") print("recv: ", key, passwd)
print(conn.get(key))
if not conn.get(key):
return redirect("sms.html")
elif conn.get(key) == passwd.encode("utf-8"):
cookie_content = request.COOKIES
is_login = request.session["is_login"]
username = request.session["username"] dic_data = {
"cookie_content": cookie_content,
"is_login": is_login,
"username": username,
}
print("cookie_content: ", cookie_content)
print(conn.get(phone_num)) return HttpResponse(json.dumps(dic_data))
else:
return HttpResponse("密码错误")

Django Redis验证码 密码 session 实例的更多相关文章

  1. Django 之验证码实现

    1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...

  2. Linux中python3,django,redis以及mariab的安装

    1. Linux中python3,django,redis以及mariab的安装 2. CentOS下编译安装python3 编译安装python3.6的步骤 1.下载python3源码包 wget ...

  3. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin   Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...

  4. pyhton框架Django之cookie和session

    一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文 ...

  5. 第4天:Django的cookie和session

    Cookie Session Cookie 浏览器请求服务器是无状态的,它的每一次请求对于服务器来说都是新的,服务器默认不会保存用户的状态数据.但很多时候,服务器需要保存用户的一些状态数据,比如用户是 ...

  6. 第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

    Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处 ...

  7. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  8. Django中Cookie和Session配置和操作

    Cookie Cookie以键值对Key-Value形势进行信息的存储. Cookie基于域名安全,不同域名的Cookie是不能互相访问的 Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏 ...

  9. 基于redis的处理session的方法

    一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...

随机推荐

  1. 【字符串】Reverse Words in a String(两个栈)

    题目: Given an input string, reverse the string word by word. For example,Given s = "the sky is b ...

  2. mysql RR下不存在则插入

    主要看并发事务中不存在则插入(只有key索引)的阻塞情况. 表定义: mysql> desc user; +-------------+------------------+------+--- ...

  3. Memcached理解笔2---XMemcached&Spring集成

    一.Memcached Client简要介绍 Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种C ...

  4. Java指定保留小数位数的方法

    package com.qiyuan.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.tex ...

  5. UIKit 框架之UITableView二

    // // ViewController.m // UITableView // // Created by City--Online on 15/5/21. // Copyright (c) 201 ...

  6. 初学者使用MySQL_Workbench 6.0CE创建数据库和表,以及在表中插入数据。

    标签: mysqlworkbench数据库 2013-10-09 20:17 19225人阅读 评论(14) 收藏 举报  分类: mysql(1)  版权声明:本文为博主原创文章,未经博主允许不得转 ...

  7. C#异步,多线程下的HttpContext丢失问题

    1.思路概述 首先让我把大概的一个思路先说一遍吧. 我在一个页面中要同时调用两个接口,而我要给这些接口一些参数:就是我通过HttpContext.Current.Request.QueryString ...

  8. 添加List集合覆盖问题

    今天在做一个项目的时候,发现了这样一个问题,为了让大家看得更直接明了,我直接放代码: public void InsertObjectToList(){ List<NewsProtetype&g ...

  9. 我在项目中运用 IOC(依赖注入)--实战篇

    上一篇<我在项目中运用 IOC(依赖注入)--入门篇>只是简单的使用 IOC.实际项目使用 IOC 的情景复杂多了,比如说,构造函数有多个参数,有多个类继承同一个接口... Unity都有 ...

  10. Netty面试

    声明:此文章非本人所 原创,是别人分享所得,如有知道原作者是谁可以联系本人,如有转载请加上此段话  1.BIO.NIO 和 AIO 的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要 ...