图形验证码,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已经存在则不会进行操作。)

django-redis详情见:https://django-redis-chs.readthedocs.io/zh_CN/latest/ django-redis中文文档

 

阿里云短信验证码:

申请签名和模板

img

下载pythonSDK

pip install aliyun-python-sdk-core

 

设置AK和SK

img

 

 

发送短信代码

 ```

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

```

原文地址:https://www.cnblogs.com/my-soul-my-heart/p/13923218.html