注冊(cè)短信驗(yàn)證三步走

1禁炒、發(fā)送驗(yàn)證碼模塊

import json

#發(fā)送驗(yàn)證碼
class YuanPian(object):
    def __init__(self, api_key):

        #個(gè)人在云片網(wǎng)的身份
        self.api_key = api_key

        #要請(qǐng)求的url  ======>>>>>>>>發(fā)短信
        self.single_send_url = "https://sms.yunpian.com/v2/sms/single_send.json"

    def send_sms(self,code,mobile):
        """
            apikey  string  是   是   用戶唯一標(biāo)識(shí)焙矛,在管理控制臺(tái)獲取 9b11127a9701975c734b8aee81ee3526
            mobile  string  是   是   接收的手機(jī)號(hào)超棺,僅支持單號(hào)碼發(fā)送;    15205201314
            text    string  是   是   已審核短信模板 【云片網(wǎng)】您的驗(yàn)證碼是1234
            讓云片網(wǎng)發(fā)送短信驗(yàn)證 我們需要傳參數(shù)
            code:短信驗(yàn)證碼
            mobile:手機(jī)號(hào)碼

        """

        params = {
            "apikey":self.api_key,
            "moblie":mobile,
            "text":"[四方科技]您的驗(yàn)證碼是{}.如過不是本人操作,請(qǐng)忽略此短信".format(code)
            }

        #發(fā)起一個(gè)網(wǎng)絡(luò)請(qǐng)求,得到響應(yīng)
        response = requests.post(self.single_send_url,data=params)

        #提示一下
        ret = json.loads(response.text)
        return ret


if __name__ == '__main__':
    #測試
    #實(shí)例化一個(gè)對(duì)象
    yun_pian = YuanPian("c60770e37f172c235b9b3c0380807108") #參數(shù)云片api_key
    yun_pian.send_sms('1314','15836540122')  #參數(shù):驗(yàn)證模板养交、手機(jī)號(hào)

2\驗(yàn)證手機(jī)號(hào)模塊:序列化

from LeShop import settings
from rest_framework import serializers
from datetime import datetime,timedelta
#導(dǎo)入用戶模型
from django.contrib.auth import get_user_model
from .models import VerifyCode

User = get_user_model()
#只做驗(yàn)證手機(jī)號(hào)
#發(fā)送驗(yàn)證馬的時(shí)候,她傳手機(jī)號(hào)
class SmsSerializer(serializers.Serializer):
    mobile = serializers.CharField(max_length=11,label="手機(jī)號(hào)")

    #validate + 字段名字 表示用戶發(fā)mobile會(huì)調(diào)用validate_mobile這個(gè)方法
    def validate_mobile(self, mobile):
        #驗(yàn)證方法
        #1瓢宦、驗(yàn)證是否注冊(cè)
        if User.objects.filter(mobile=mobile).count():
            raise serializers.ValidationError("用戶已經(jīng)注冊(cè)")

        #2碎连、驗(yàn)證號(hào)碼正則表達(dá)式  是否真是
        if not  re.match(settings.REGEX_MOBILE,mobile):
            raise serializers.ValidationError("手機(jī)號(hào)不正確")

        #3、判斷頻率一分鐘只能發(fā)一次
        one_minutes_ago = datetime.now() - timedelta(hours=0, minutes=1, seconds=0)

        if VerifyCode.objects.filter(add_time__gt=one_minutes_ago,mobile=mobile):
            raise serializers.ValidationError("60秒內(nèi)只能發(fā)送一次")

        return mobile

3\視圖模塊

from  rest_framework import viewsets
# Create your views here.
from rest_framework import mixins
from .serializers import SmsSerializer
from random import choice
from rest_framework.response import Response
from rest_framework import status
from LeShop import settings
from utils.yuanpian import YuanPian
from .models import VerifyCode
class SmsCodeViewset(mixins.CreateModelMixin,viewsets.GenericViewSet):
    serializer_class = SmsSerializer     #1\只做驗(yàn)證手機(jī)號(hào)  #發(fā)送驗(yàn)證馬的時(shí)候驮履,她傳手機(jī)號(hào)


    def generate_code(self):
        """
        生成四位數(shù)字的驗(yàn)證碼
        """

        seeds = "1234567890"
        random_str = []
        for i in range(4):
            random_str.append(choice(seeds))

        return "".join(random_str)
    #重寫這個(gè)方法
    #1鱼辙、父類做的事情 ,很簡單就存一個(gè)模型到數(shù)據(jù)庫疲吸,添加一個(gè)新的數(shù)據(jù)座每,不滿足需求
    #2、我要的事情是在弗雷德基礎(chǔ)上
    #2摘悴、發(fā)短西驗(yàn)證碼(隨機(jī)生成數(shù)字)
    #4、發(fā)送YunPian 接收返回值 code=0是否成功
    #5舰绘、保存這個(gè)驗(yàn)證ma
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data) #獲取序列化的類 驗(yàn)證手機(jī)號(hào) SmsSerializer
        serializer.is_valid(raise_exception=True)#驗(yàn)證

        #可用的手機(jī)號(hào)
        yuan_pian = YuanPian(settings.APIKEY)

        #生成驗(yàn)證碼
        code = self.generate_code()

        #validated_data拿到序列化里面的字段
        sms_status = yuan_pian.send_sms(code,mobile=serializer.validated_data["mobile"]) # 調(diào)用yuan_pian.send_sms方法發(fā)送驗(yàn)證碼

        if sms_status['code']!=0:
            #失敗
            return Response(sms_status['msg'],status=status.HTTP_400_BAD_REQUEST)
        else:
            #成功
            VerifyCode(code=code,mobile=serializer.validated_data["mobile"])
            return Response(sms_status['msg'],status=status.HTTP_201_CREATED)




        self.perform_create(serializer)#保存
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹂喻,一起剝皮案震驚了整個(gè)濱河市葱椭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌口四,老刑警劉巖孵运,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔓彩,居然都是意外死亡治笨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門赤嚼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旷赖,“玉大人,你說我怎么就攤上這事更卒〉确酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵蹂空,是天一觀的道長俯萌。 經(jīng)常有香客問我,道長上枕,這世上最難降的妖魔是什么咐熙? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮辨萍,結(jié)果婚禮上糖声,老公的妹妹穿的比我還像新娘。我一直安慰自己分瘦,他們只是感情好蘸泻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘲玫,像睡著了一般悦施。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上去团,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天抡诞,我揣著相機(jī)與錄音,去河邊找鬼土陪。 笑死昼汗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鬼雀。 我是一名探鬼主播顷窒,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了鞋吉?” 一聲冷哼從身側(cè)響起鸦做,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谓着,沒想到半個(gè)月后泼诱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赊锚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年治筒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舷蒲。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耸袜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阿纤,到底是詐尸還是另有隱情句灌,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布欠拾,位于F島的核電站胰锌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藐窄。R本人自食惡果不足惜资昧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荆忍。 院中可真熱鬧格带,春花似錦、人聲如沸刹枉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽微宝。三九已至棺亭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蟋软,已是汗流浹背镶摘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岳守,地道東北人凄敢。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像湿痢,于是被迫代替她去往敵國和親涝缝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常俊卤。 O...
    我想起個(gè)好名字閱讀 5,176評(píng)論 0 9
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫嫩挤、插件害幅、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 江南的風(fēng)俗消恍,棺材、衾衣以现,整套殮葬的對(duì)象狠怨,在人活著時(shí)就備得齊齊全全,稱之為“壽材”“壽衣”邑遏,似乎是含有祝愿長命的意思...
    Sunny飛鏡閱讀 180評(píng)論 0 0
  • 01 肖檸從小學(xué)四年級(jí)開始“崛起”佣赖,從班級(jí)20名,一躍到第3名记盒。從此憎蛤,少女心中的能量就爆發(fā)了,一直到高三上學(xué)期她都...
    文藝偏執(zhí)狂閱讀 154評(píng)論 2 2