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 实例 - Python技术站