天天看点

key设计 短信验证存redis_图形验证码,redis,短信验证码

图形验证码:

views:

```

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已经存在则不会进行操作。)

阿里云短信验证码:

申请签名和模板

key设计 短信验证存redis_图形验证码,redis,短信验证码

下载pythonSDK

pip install aliyun-python-sdk-core

设置AK和SK

key设计 短信验证存redis_图形验证码,redis,短信验证码

发送短信代码

```

#!/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'))

```