從這篇文章可以期待什麼?
我們在先前的文章中開始開發帳戶應用程序,本文將以此為基礎。它將涵蓋
- 用於忘記密碼、重新發送代碼和帳戶詳細資訊的序列化程序。
- 相同 API 的視圖。
- 當然還有網址。
我會盡力介紹盡可能多的細節,以免讓您感到無聊,但我仍然希望您熟悉 Python 和 Django 的某些方面。
最終版本的原始碼可以在https://github.com/saad4software/alive-diary-backend
系列訂購
有興趣的話可以查看之前的文章!
- 從頭開始的人工智慧專案、創意、Alive 日記
- 用 Google AI Studio 證明它是可行的
- Django API 專案設定
- Django帳戶管理(一)、註冊與啟動
- Django帳戶管理(二)、登入及修改密碼
- 帶有 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
這是一個通用序列化程序,只有一個字段,即用戶名,我們正在檢查以確保它是有效的電子郵件地址,並且用戶已在系統中註冊。
現在來看看
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
視圖首先驗證請求,然後取得使用者並為其建立程式碼實例。最後透過電子郵件將程式碼傳送給使用者。
最後是網址
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
所有欄位都是必需的,我們使用驗證函數來同時驗證使用者名稱和程式碼。如果該使用者沒有即時代碼,我們會引發驗證錯誤,如果發送的代碼與即時代碼值不匹配,我們會透過引發「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
和網址
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”前綴,有點像“Bearer eyJhbGc...”
現在測試詳細資料 API 應傳回如圖所示的帳戶詳細資料
就是這樣!恭喜,您擁有一個功能齊全的帳戶管理應用程序,只需進行最少的修改即可在任何 Django 應用程式中使用
您認為它還需要其他功能嗎?請提出建議!
我們將在下一篇文章中回到主應用程序,所以
敬請期待?
以上是Django 帳戶管理應用程式(忘記密碼和帳戶詳細信息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,內存效率段

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero

Inpython,一個“列表” isaversatile,mutableSequencethatCanholdMixedDatateTypes,而“陣列” isamorememory-sepersequeSequeSequeSequeSequeRingequiringElements.1)列表

pythonlistsandArraysareBothable.1)列表Sareflexibleandsupportereceneousdatabutarelessmory-Memory-Empefficity.2)ArraysareMoremoremoremoreMemoremorememorememorememoremorememogeneSdatabutlesserversEversementime,defteringcorcttypecrecttypececeDepeceDyusagetoagetoavoavoiDerrors。

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1
強大的PHP整合開發環境

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

Atom編輯器mac版下載
最受歡迎的的開源編輯器