接下来,我们把注册过程中一些注册信息(例如:短信验证码)和session缓存到redis数据库中。
安装django-redis。
pip install django-redis
在settings/dev.py配置中添加一下代码:
# 设置redis缓存 CACHES = { # 默认缓存 "default": { "BACKEND": "django_redis.cache.RedisCache", # 项目上线时,需要调整这里的路径 "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, # 提供给xadmin或者admin的session存储 "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, # 提供存储短信验证码 "sms_code":{ "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/2", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } # 设置xadmin用户登录时,登录信息session保存到redis SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session"
关于django-redis 的使用,说明文档可见http://django-redis-chs.readthedocs.io/zh_CN/latest/
django-redis提供了get_redis_connection的方法,通过调用get_redis_connection方法传递redis的配置名称可获取到redis的连接对象,通过redis连接对象可以执行redis命令
https://redis-py.readthedocs.io/en/latest/
使用范例:
from django_redis import get_redis_connection // 链接redis数据库 redis_conn = get_redis_connection("sms_code") // 操作redis redis_conn.setex("键","时间(秒)","值") # 这个redis类把终端命令封装成了redis类的方法,命令的选项编程了方法的参数,所以这段代码的操作,等同于在终端下 sexex 键 时间 值
在登录后的平台上面获取一下信息:
ACCOUNT SID:8a216da86e011fa3016e4aedea792a4e AUTH TOKEN : 4fee1ea5d1024bce948db54b9161c97e AppID(默认):8a216da86e011fa3016e4aedeacb2a54 Rest URL(生产): app.cloopen.com:8883 [项目上线时使用真实短信发送服务器] Rest URL(开发): sandboxapp.cloopen.com:8883 [项目开发时使用沙箱短信发送服务器]
找到sdkdemo进行下载
在开发过程中,为了节约发送短信的成本,可以把自己的或者同事的手机加入到测试号码中.
把云通讯的sdk保存到libs目录下, 并修改里面的基本配置信息。
sms.py,代码:
# -*- coding:utf-8 -*- from .CCPRestSDK import REST from django.conf import settings # 说明:主账号,登陆云通讯网站后,可在"控制台-应用"中看到开发者主账号ACCOUNT SID _accountSid = settings.SMS["_accountSid"] # 说明:主账号Token,登陆云通讯网站后,可在控制台-应用中看到开发者主账号AUTH TOKEN _accountToken = settings.SMS["_accountToken"] # 6dd01b2b60104b3dbc88b2b74158bac6 # 请使用管理控制台首页的APPID或自己创建应用的APPID _appId = settings.SMS["_appId"] # 8a216da863f8e6c20164139688400c21 # 说明:请求地址,生产环境配置成app.cloopen.com _serverIP = settings.SMS["_serverIP"] # 说明:请求端口 ,生产环境为8883 _serverPort = settings.SMS["_serverPort"] # 说明:REST API版本号保持不变 _softVersion = ‘2013-12-26‘ # 云通讯官方提供的发送短信代码实例 # # 发送模板短信 # # @param to 手机号码 # # @param datas 内容数据 格式为数组 例如:{‘12‘,‘34‘},如不需替换请填 ‘‘ # # @param $tempId 模板Id # # def sendTemplateSMS(to, datas, tempId): # # 初始化REST SDK # rest = REST(serverIP, serverPort, softVersion) # rest.setAccount(accountSid, accountToken) # rest.setAppId(appId) # # result = rest.sendTemplateSMS(to, datas, tempId) # for k, v in result.iteritems(): # # if k == ‘templateSMS‘: # for k, s in v.iteritems(): # print ‘%s:%s‘ % (k, s) # else: # print ‘%s:%s‘ % (k, v) class CCP(object): """发送短信的辅助类""" def __new__(cls, *args, **kwargs): # 判断是否存在类属性_instance,_instance是类CCP的唯一对象,即单例 if not hasattr(CCP, "_instance"): cls._instance = super(CCP, cls).__new__(cls, *args, **kwargs) cls._instance.rest = REST(_serverIP, _serverPort, _softVersion) cls._instance.rest.setAccount(_accountSid, _accountToken) cls._instance.rest.setAppId(_appId) return cls._instance def send_template_sms(self, to, datas, temp_id): """发送模板短信""" # @param to 手机号码 # @param datas 内容数据 格式为数组 例如:{‘12‘,‘34‘},如不需替换请填 ‘‘ # @param temp_id 模板Id result = self.rest.sendTemplateSMS(to, datas, temp_id) # 如果云通讯发送短信成功,返回的字典数据result中statuCode字段的值为"000000" return result.get("statusCode") == "000000" if __name__ == ‘__main__‘: ccp = CCP() # 注意: 测试的短信模板编号为1[以后申请了企业账号以后可以有更多的模板] # 参数1: 客户端手机号码,测试时只能发给测试号码 # 参数2: 短信模块中的数据 # 短信验证码 # 短信验证码有效期提示 # 参数3: 短信模板的id,开发测试时,只能使用1 ccp.send_template_sms(‘17610211902‘, [‘1234‘,"5分钟"], 1)
配置文件,代码:
# 云通讯短信 SMS = { # 说明:主账号,登陆云通讯网站后,可在"控制台-应用"中看到开发者主账号ACCOUNT SID "_accountSid":‘8a216da863f8e6c20164139687e80c1b‘, # 说明:主账号Token,登陆云通讯网站后,可在控制台-应用中看到开发者主账号AUTH TOKEN "_accountToken":‘4fee1ea5d1024bce948db54b9161c97e‘, # 请使用管理控制台首页的APPID或自己创建应用的APPID "_appId":‘8a216da86e011fa3016e4aedeacb2a54‘, # 说明:请求地址,生产环境配置成app.cloopen.com "_serverIP":‘sandboxapp.cloopen.com‘, # 说明:请求端口 ,生产环境为8883 "_serverPort": "8883", }
原文:https://www.cnblogs.com/Pythonzrq/p/11823167.html