• 图形验证码,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'))

    ```

  • 相关阅读:
    [转载] 美团-云鹏: 写给工程师的十条精进原则
    Docker测试一个静态网站
    Docker容器访问外部世界
    Docker容器间通信
    Docker网络(host、bridge、none)详细介绍
    Docker的资源限制(内存、CPU、IO)详细篇
    esxi中CentOS7不停机加磁盘并扩容现有分区
    ESXI6.5安装CentOS7教程
    Linux查看占用CPU和内存的 的程序
    Centos7使用脚本搭建LVS的DR模式。
  • 原文地址:https://www.cnblogs.com/my-soul-my-heart/p/13923218.html
Copyright © 2020-2023  润新知