Django Redis验证码 密码 session 实例
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>
密 码:<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>
密 码:<input id="check_passwd" type="text" name="passwd" placeholder="请输入密码"> <span style="color: red"></span>
<p></p>
验证码:<input id="code" type="text" name="code" placeholder="请输入验证码"> <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 实例的更多相关文章
- Django 之验证码实现
1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...
- Linux中python3,django,redis以及mariab的安装
1. Linux中python3,django,redis以及mariab的安装 2. CentOS下编译安装python3 编译安装python3.6的步骤 1.下载python3源码包 wget ...
- Django之Cookie、Session、CSRF、Admin
Django之Cookie.Session.CSRF.Admin Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...
- pyhton框架Django之cookie和session
一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文 ...
- 第4天:Django的cookie和session
Cookie Session Cookie 浏览器请求服务器是无状态的,它的每一次请求对于服务器来说都是新的,服务器默认不会保存用户的状态数据.但很多时候,服务器需要保存用户的一些状态数据,比如用户是 ...
- 第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证
Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片 生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处 ...
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...
- Django中Cookie和Session配置和操作
Cookie Cookie以键值对Key-Value形势进行信息的存储. Cookie基于域名安全,不同域名的Cookie是不能互相访问的 Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏 ...
- 基于redis的处理session的方法
一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...
随机推荐
- [webrtc] RTX的处理
以前笔记,整理 webrtc中默认开启rtx用于丢包重传,rtx的介绍可以参考rfc4588,https://tools.ietf.org/html/rfc4588#section-4 rtx使用额外 ...
- PHP CURL 抓取失败 自己调试
蛋疼的一下午,物理机win7旗舰版+APACHE2 ,CURL抓取一直成功. 虚拟机ubuntu+apache2一直抓取失败. 晚上,问个仁兄才知道,CURL可以调试: 参考这位兄台: 地址 curl ...
- Android之Zxing二维码扫描图片拉伸
还是这个接手项目,二维码扫描集成的是zxing,扫描界面的图像有明显的拉伸变形. 这种问题,根据以往的经验,一般是x,y轴错位引起的,处理好x,y轴的问题,一般可以解决问题. 由于这个问题,之前有很多 ...
- 10-hdfs-hdfs搭建
hdfs的优缺点比较: 架构图解分析: nameNode的主要任务: SNameNode的功能: (不是NN的备份, 主要用来合并fsimage) 合并流程: dataNode的主要功能: HDFS上 ...
- mysql 导出数据到csv文件的命令
1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ...
- SpringMVC异常处理机制
SpringMVC异常处理机制 springMVC会将所有在doDispatch方法中的异常捕获,然后处理.无法处理的异常会抛出给容器处理. 在doDispatch()中调用processDispat ...
- python迭代器、生成器、装饰器
1 迭代器 这里我们先来回顾一下什么是可迭代对象(Iterable)? 可以直接作用于for循环的对象统称为可迭代对象,即Iterable. # 一是集合数据类型,如list.tuple.dict.s ...
- python之首字母大写
目录 首字母大写 算法说明 代码实现 首字母大写 算法说明 功能: 将传入的字符串第一个字母大写; 额外参数用来控制两种转换类型 保持不变 所有的字符转变为小写 代码实现 知识点 python 内置方 ...
- log4配置
log4j 和 log4j2 方式一:log4j2.xml 添加 jar 包 <!-- log4j-core --> <!-- <dependency> <grou ...
- c#读取html文件内容替换之后再写入
string sss = File.ReadAllText("E:\\FM\\Mall\\MallSGWeb\\MallSGWeb\\MALL_simple\\File\\11111.htm ...