この記事から何を期待できるでしょうか?
前回の記事でアカウント アプリの開発を開始しました。この記事はそれに基づいて構築します。カバーします
- パスワードの忘れ、コードの再送信、およびアカウントの詳細のためのシリアライザー。
- 同じ API のビュー。
- そしてもちろん URL も。
読者を飽きさせないように、できるだけ多くの詳細を説明するよう努めますが、Python と Django のいくつかの側面についてはよく知っていることを期待しています。
ソース コードの最終バージョンは https://github.com/saad4software/alive-diary-backend にあります
シリーズの順序
興味があれば過去の記事をチェックしてください!
- ゼロから作る AI プロジェクト、アイデア、生きた日記
- Google AI Studio で実現可能であることを証明してください
- Django API プロジェクトのセットアップ
- Django アカウント管理 (1)、登録とアクティブ化
- Django アカウント管理 (2)、ログインとパスワードの変更
- Swagger を使用した Django Rest フレームワーク
- Django アカウント管理 (3) パスワードとアカウントの詳細を忘れました (ここにいますか?)
どのように機能するのでしょうか?
パスワードを忘れた場合のリクエストはどのように機能しますか?プロセスは次の手順に従う必要があります
- ユーザーがパスワードを忘れました。明らかに ?、愚かです。
- ユーザーは自分の電子メール アドレスを入力します。
- 確認コードが記載されたメールがメールに送信されます。
- ユーザーは電子メールとアクティベーション コードを使用して新しいパスワードを設定できます。
したがって、コード再送信 API と同じように、電子メール アドレスを取得し、アクティベーション コードを作成してユーザーに送信する API が必要です。
また、パスワードをリセットするために電子メール、アクティベーション コード、および新しいパスワードを取得する別の API も必要です。
コード API の再送信から始めるのは良いアイデアのように思えます。
コードAPIを再送信する
いつものように、シリアライザーから始めましょう
class SendCodeSerializer(serializers.Serializer): username = serializers.CharField(required=True) def validate_username(self, value): if not is_valid_email(value): raise serializers.ValidationError("invalid_email") verification_query = get_user_model().objects.filter(username=value).exists() if not verification_query: raise serializers.ValidationError("invalid_username") return value
app_account/serializers.py
これは汎用シリアライザーであり、ユーザー名というフィールドが 1 つあり、それが有効な電子メール アドレスであること、およびユーザーがシステムに登録されていることを確認します。
ここからはビューです
class AccountSendCodeView(APIView): permission_classes = () renderer_classes = [CustomRenderer, BrowsableAPIRenderer] @swagger_auto_schema(request_body=SendCodeSerializer) def post(self, request, *args, **kwargs): serializer = SendCodeSerializer(data=request.data) if not serializer.is_valid(): raise APIException(serializer.errors) user = get_user_model().objects.filter(username=serializer.validated_data.get("username")).first() code = VerificationCode(user=user, email=user.username) code.save() send_mail( 'Password Reset Code', 'Your password reset code is ' + str(code.code), f'AliveDiary', [user.username], fail_silently=False, ) return Response("success")
app_account/views.py
ビューはリクエストを検証することから始まり、次にユーザーを取得してそのコードインスタントを作成します。そして最後にコードを電子メールでユーザーに送信します。
そして最後に URL
urlpatterns = [ path('register/', AccountRegisterView.as_view()), path('activate/', AccountActivateView.as_view()), path('login/', AccountLoginView.as_view()), path('refresh/', AccountRefreshTokenView.as_view()), path('code/', AccountSendCodeView.as_view()), #new path('password/', AccountChangePasswordView.as_view()), ]
app_account/urls.py
これで swagger でテストできるようになりました
パスワードリセットAPI
シリアライザーには、ユーザー名、送信されたコード、および新しいパスワードが含まれている必要があります。
のような、有効なユーザー名とコードであることを確認する必要があります。
class ForgotPasswordSerializer(serializers.Serializer): username = serializers.CharField(required=True) code = serializers.CharField(required=True) new_password = serializers.CharField(required=True) def validate(self, data): verification_query = VerificationCode.objects.filter( user__username=data['username'], ).order_by('-id') if not verification_query.exists(): raise serializers.ValidationError("no_code") code = verification_query[0] if str(code.code) != str(data['code']): raise serializers.ValidationError("invalid_code") return data
app_account/serializers.py
すべてのフィールドは必須です。ユーザー名とコードの両方を一緒に検証するために validate 関数を使用しました。このユーザーにコード インスタントがない場合は検証エラーが発生し、送信されたコードがインスタント コード値と一致しない場合は、「invalid_code」検証エラーを発生させてユーザーに通知します。
ビューの場合、最初にシリアライザーを検証する必要があります
class SendCodeSerializer(serializers.Serializer): username = serializers.CharField(required=True) def validate_username(self, value): if not is_valid_email(value): raise serializers.ValidationError("invalid_email") verification_query = get_user_model().objects.filter(username=value).exists() if not verification_query: raise serializers.ValidationError("invalid_username") return value
app_account/views.py
シリアライザーが有効でない場合は、シリアライザー エラーで API 例外を発生させます。有効な場合は、シリアライザー データを使用して検証インスタントをクエリします。このクエリは常に存在し、このクエリは既にシリアライザー チェックに合格しているため、送信されたコードは検証インスタント コード値と同じであることに注意してください。
次に、データベースから検証インスタンスを削除し、シリアライザーからの "new_password" 値でユーザー パスワードを更新します
最後に、URL ファイルを更新しましょう
class AccountSendCodeView(APIView): permission_classes = () renderer_classes = [CustomRenderer, BrowsableAPIRenderer] @swagger_auto_schema(request_body=SendCodeSerializer) def post(self, request, *args, **kwargs): serializer = SendCodeSerializer(data=request.data) if not serializer.is_valid(): raise APIException(serializer.errors) user = get_user_model().objects.filter(username=serializer.validated_data.get("username")).first() code = VerificationCode(user=user, email=user.username) code.save() send_mail( 'Password Reset Code', 'Your password reset code is ' + str(code.code), f'AliveDiary', [user.username], fail_silently=False, ) return Response("success")
app_account/urls.py
アカウント詳細 API
ユーザー モデルのシリアライザーを作成することから始めましょう。次のようになります。
urlpatterns = [ path('register/', AccountRegisterView.as_view()), path('activate/', AccountActivateView.as_view()), path('login/', AccountLoginView.as_view()), path('refresh/', AccountRefreshTokenView.as_view()), path('code/', AccountSendCodeView.as_view()), #new path('password/', AccountChangePasswordView.as_view()), ]
app_account/serializers.py
これはモデル シリアライザーです。ユーザー モデルを選択し、シリアル化するフィールドをリストしました。
ビューに移ると、ユーザーが GET リクエストでユーザーの詳細を取得し、POST リクエストでユーザーの詳細を更新できるビューが必要です。
のようになります。
class ForgotPasswordSerializer(serializers.Serializer): username = serializers.CharField(required=True) code = serializers.CharField(required=True) new_password = serializers.CharField(required=True) def validate(self, data): verification_query = VerificationCode.objects.filter( user__username=data['username'], ).order_by('-id') if not verification_query.exists(): raise serializers.ValidationError("no_code") code = verification_query[0] if str(code.code) != str(data['code']): raise serializers.ValidationError("invalid_code") return data
app_account/views.py
とURL
class AccountForgotPasswordView(APIView): permission_classes = () renderer_classes = [CustomRenderer, BrowsableAPIRenderer] @swagger_auto_schema(request_body=ForgotPasswordSerializer) def post(self, request, *args, **kwargs): serializer = ForgotPasswordSerializer(data=request.data) if not serializer.is_valid(): raise APIException(serializer.errors) verification_query = VerificationCode.objects.filter( user__username=serializer.validated_data.get('username'), code=serializer.validated_data.get('code') ).order_by('-id') verification_query.delete() user = get_user_model().objects.filter( username=serializer.validated_data.get('username'), ).first() user.set_password(serializer.validated_data.get('new_password')) user.save() return Response("success")
app_account/urls.py
それです!これを Swagger でテストしてみましょう。http://localhost:8555/swagger/ を開いてログインを使用すると、有効なトークンを取得できます。承認されたリクエストをテストするには、鍵をクリックする必要があります。アイコン、Swagger の任意のロック アイコン、およびトークンに「Bearer eyJhbGc...」のような「Bearer」プレフィックスを指定します
現在、詳細 API をテストしているため、次のようなアカウントの詳細が返されるはずです
それです!おめでとうございます。最小限の変更を加えるだけで、どの Django アプリでも使用できる、完全に機能するアカウント管理アプリが完成しました
他の機能が必要だと思いますか?提案してください!
次の記事ではメイン アプリに戻りますので、
乞うご期待?
以上がDjango アカウント管理アプリ (パスワードとアカウントの詳細を忘れた場合)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
