(新鮮なプロジェクト)17. DRF送信テキストメッセージを機能検証コードを達成するために

第1のステップと、予備的分析

設計モデルの前に、我々は、データベースのコードを保存することを決定しましたので、そこでここでは、使用する必要があります  mixins.CreateModelMixinを

ユーザーの携帯電話番号で送信されると同時に、で、私たちには、自分のバックエンドの検証を行う必要があります

  • 電話番号が登録されているかどうか
  • 電話番号が正当[settings.pyプラスREGEX_MOBILE = "^ 1 [358] \ {D} $ 9。。| ^ 147 \ 8 {D} $ | ^ 176 \ 8 {D} $。"]
  • 2つのコード間の間隔は60秒超であるかどうか

これらの考察に基づいて、我々は作成する必要がありますシリアライザを 

シリアライザ・ロジックを書くとき、私たちは、シリアライザとusers.models.VerifyCodeとして財を書き込む前に、我々は同じようにならないことをここで注意しなければならないバインド、VerifyCodeコードが必要な分野であるが、ユーザーは電話番号のみに確認コードを取得する必要がありますので、

あなたがフィールドにシリアライザとのみを使用している場合、これに書き換える必要性を確認しvalidate_フィールド名を()関数を

コードコードは、必要があり、その後の後に正常に送信され、保存、ユーザーがコードを推測防止し、及びログインが成功します

 

第2の工程と、書き込みコード

まず、書き込みuser.serializers.py

輸入から日時インポート日時で、timedelta
 から rest_frameworkの輸入シリアライザ
 から django.contrib.auth 輸入get_user_model  

MxShop.settingsの輸入REGEX_MOBILE
 から .models インポートVerifyCodeを

ユーザー = get_user_model() は、USERPROFILEデータベーステーブルを取得することができます


電話番号を確認し
、クラスSmsSerializer(serializers.Serializerを):
    モバイル = serializers.CharField(MAX_LENGTH = 11 

    アローン検証するために、モバイル分野のための
    DEF :validate_mobile(モバイルセルフ、)
        電話番号が登録されている
        IF User.objects.filter(モバイル= モバイル).count():
             昇給 serializers.ValidationErrorを(" ユーザーがすでに存在しています" 

        電話番号が正当なものである
        IFが ない(REGEX_MOBILE、モバイル)をre.match:
             昇給 serializers.ValidationError(違法な携帯電話番号

        送信周波数を確認 
        = DateTime.Now()one_minute_ago -はtimedelta(時間= 0、= 1分、秒= 0)
         IF VerifyCode.objects.filter(add_time__gt = one_minute_ago、モバイル= モバイル).count():
             上げ serializers.ValidationError (最後の伝送距離が60秒を超えていません

        によって検証
        リターンモバイル

そして、書き込みuser.views.py

django.shortcuts インポートレンダリング
 から django.contrib.auth.backends インポートModelBackendを
 から django.contrib.auth 輸入get_user_model
 から django.db.models インポートQを
 から rest_framework.mixins インポートCreateModelMixinを
 から rest_frameworkの輸入ビューセット
 から rest_framework.response 輸入レスポンス
 から rest_framework 輸入状況
 からランダム輸入選択肢

.serializers インポートSmsSerializerを
 から utils.yunpian 輸入YunPian
 から MxShop.settingsの輸入APIKEY
 から .models インポートVerifyCodeを

ユーザー = get_user_model() 送信メッセージ認証コード
クラスSmsCodeViewset(CreateModelMixin、viewsets.GenericViewSet)。
    serializer_class = SmsSerializer

    ランダムコードの生成機能
    DEF generate_code(セルフ):
        種子 = " 1234567890 " 
        code_lst = []
         のための I における範囲(4 ):
            code_lst.append(選択肢(シーズ))
        リターン "" .join(code_lst)


    デフ(自己、要求、* argsを、**作成kwargsからの):
        シリアライザ = self.get_serializer(データ= request.data)
        serializer.is_valid(RAISE_EXCEPTION = TRUE) シリアライザが通過しない場合には、後者は実行されず、DRFう自動包装ステータスコード400を

        モバイルフィールド上記検証が成功し、モバイル得、その送信及びコード 
        モバイルserializer.validated_data = [ モバイル ] #1 validated_dataがデータシリアライザに戻され、A辞書 
        yunpian = YunPian(APIKEY)
        コード = self.generate_code()
        sms_status = yunpian.send_sms(コード=コード、モバイル= モバイル)

        送信が失敗した場合は、パディングモバイルにエラーメッセージ、一方、パッケージ400のコードの状態
        IF sms_status [ コード ]!= 0:を
             返す(レスポンス
                { " モバイル":sms_status [ " MSG " ]}、
                ステータス = status.HTTP_400_BAD_REQUEST
        データベースに保存するための送信成功コードであれば、電話番号を返し、ステータスコードパッケージ201 
            code_record = VerifyCode(コード=コード、モバイル= モバイル)
            code_record.save()
            リターンレスポンス(
                { モバイル:モバイル}
                ステータス = status.HTTP_201_CREATED

次に、settings.py

電話番号正規表現 
REGEX_MOBILE = " ^ 1 [358] \ {D} $ 9 |。。。^ 147 \ 8 {D} $ | ^ 176 \ 8 {D} $。"

クラウドシートウェブに配置された 
APIKEY = cdb6f4b3860c552f790176a9e4f3fd85 

最後にurls.py、確認コードを登録するインタフェース

送信認証コードインターフェース 
(R&LT router.register ' コード'、SmsCodeViewset、ベース名= " コード"

次に、あなたのブラウザのテストに行きます

 

 

 

 

 

 

 

 

 

 

 

 

---事実ではなく、その中国での紳士、その内部のガバナンスは、外側死亡した    チャン・   ----

おすすめ

転載: www.cnblogs.com/jiangzongyou/p/12111093.html