图形验证码:
from django_redis import get_redis_connection
from libs.captcha.captcha import captcha
class ImageCodeView(APIView):
def get(self, request):
# 1.接收数据
uuid = request.GET.get('uuid')
# 2.校验数据
if not uuid:
return HttpResponseForbidden('uuid无效')
# 3.处理业务
# 获取图片文本内容和图片二进制代码
text, image = captcha.generate_captcha()
# 4.把uuid和图片文本存入redis
redis_client = get_redis_connection('img_code') # 获取redis客户端
# 5.写入redis(是字符串)
redis_client.setex(uuid, 60 * 5, text)
# 6.返回响应图片
return HttpResponse(image, content_type='image/jpg')
libs下的captcha包:
https://pan.baidu.com/s/1HRQsk29G8QiW8gsrKmayqQ 提取码:7uoo
前端生成UUID的方法,写于medthods中:
```
getUuid() {
var d = new Date().getTime()
if (window.performance && typeof window.performance.now === 'function') {
d += performance.now()
}
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (d + Math.random() * 16) % 16 | 0
d = Math.floor(d / 16)
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)
})
return uuid
}
```
redis使用
str类型
添加/修改:
设置键值[O(1)]:set key value set name pp
设置键值及过期时间: setex key seconds value setex name 300 pp
设置多个键值[O(1)]: mset key1 value1 key2 value2 mset class1 python class2 java
追加值: append key value append class1 pythonNB (class1:pythonpythonNB)
获取:
获取单个值: get key get name
获取多个值: mget key1 key2 mget class1 class2
删除:
删除值: del key1 key2 del class1 class2
hash类型
添加/修改:
设置单个属性 hset key field value hset info name pp
设置多个属性 hmset key field1 value1 field2 value2 hmset info name pp age 18
获取:
获取指定key对应的所有属性 hkeys key hkeys info
获取指定key对应的单一属性 hget key field1 hget info name
获取指定key对应的多个属性 hmget key field1 field2 hmget info name age
获取指定key对应的所有的value hvals key hvals info
删除:
删除整个key: del key del info
删除key对应的某些属性: hdel key field1 field2 del info name age
list类型
增加:
从左侧插入value: lpush key value1 value2 lpush name ming uzi mlxg [mlxg,uzi,ming]
从右侧插入value: rpush key value1 value2 rpush name ming uzi mlxg [ming,uzi,mlxg]
从指定元素的前/后插入value: linsert key before/after 现有value 新value linsert name before uzi xiaohu [ming,xiaohu,uzi,mlxg]
指定位置value替换 lset key index value lset name 2 kid [ming,xiaohu,kid,mlxg]
获取:
获取范围内的value: lrange key start stop lrange name 0 -1
获取指定位置的value lindex key index lindex name 1
删除:
将列表中前count次出现的value值删掉 lrem key count value lerm name 1 uzi
(ps:count > 0,从头往尾删。 count< 0,从尾到头删。 count = 0,全部删除)
set类型
添加:
添加元素: sadd key member1 member2 sadd name uzi xiaohu
获取:
获取所有元素: smembers key smembers name
删除:
删除指定key srem key srem name
zset类型
添加:
zadd key score1 member1 score2 member2 zadd name 9 uzi 4 xiaohu
(ps:score为权重,zset通过权重从小到大排序。zset具就有唯一性,不重复。没有修改操作。)
获取:
通过索引获取:zrange key start stop zrange name 0 -1
通过权重获取:zrangebyscore key min max zrangebyscore name 6 9
通过member获取对应的score:zscore key member zscore name uzi
删除:
删除指定元素:zrem key member1 member2 zrem name uzi xiaohu
删除指定权重范围内的元素:zremrangebyscore key min max zremrangebyscore name 6 9
键命令
获取所有键: keys *
获取以a开头的所有key:keys "a*" ( ' '里的可以使用正则规则 )
判断key是否存在:exists key exists name
查看key对应的value的类型:type key type name
删除key:del key del name
设置key的过期时间:expire key seconds expire name 200
查看key的有效时间:ttl key ttl name
key重命名:rename/renamenx oldkey newkey rename/renamenx name user
(rename:如果新的key存在则会覆盖掉。renamenx:如果新的key已经存在则不会进行操作。)
django-redis详情见:https://django-redis-chs.readthedocs.io/zh_CN/latest/ django-redis中文文档
阿里云短信验证码:
申请签名和模板
下载pythonSDK
pip install aliyun-python-sdk-core
设置AK和SK
发送短信代码
```
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
AK='xxxxxxxxxx'
SK='XXXXXXXXXXXXXX'
client = AcsClient(AK, SK, 'cn-hangzhou')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2017-05-25')
request.set_action_name('SendSms')
request.add_query_param('RegionId', "cn-hangzhou")
request.add_query_param('PhoneNumbers', "17337671115")
request.add_query_param('SignName', "美多商城")
request.add_query_param('TemplateCode', "SMS_185212884")
request.add_query_param('TemplateParam', "{"code":890098}")
response = client.do_action(request)
# python2: print(response)
print(str(response, encoding = 'utf-8'))
```