Ant Design Pro V5 + Django Restful Framework Token認證后台實現(二)


Python,Django,Django Restful framework和Django Restful framework Simple-JWT的安裝和配置官方教程和各種文章很多,這里就不記錄了。
1.Setting設置
Simple-JWT的設置在官方的教程里也有詳細的描述,這里賦復制粘貼一下。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES':(
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES':(
        'rest_framework_simplejwt.authentication.JWTAuthentication',        
    ),    
}
DEFAULT_AUTHENTICATION_CLASSES指定用simplejwt進行Token認證。

2.創建登陸方法
DRF(Django Restful Framework)有不同類型的view向外提供接口,比如function-base view,class-based view(APIView),generic-view,不同的view不同的封裝層次,帶來便利性的同時會損失一些靈活性。
可以結合不同的場景使用,具體的用法也沒太仔細研究,暫時感覺APIView用起來更順手,其他的view等做到后續需求再研究。
登陸成功或者失敗都需要返回信息給前端,這樣就涉及到序列化的操作。
需要創建一個Serializer類。

class LoginSerializer(serializers.Serializer):
    status = serializers.CharField()    
    token = serializers.CharField() 

結合ADPV5(Ant Design Pro V5)的要求,返回狀態和token,方便驗證登陸狀態,如果驗證成功,返回token,ADPV5保存起來,后續請求把token帶上通過驗證。
登陸方法

class UserLoginView(APIView):
    authentication_classes  = []
    permission_classes = []
    def post(self, request, *args, **kwargs):        
        loginEntity = LoginEntity()        
        user = authenticate(username = request.data["username"], password = request.data["password"])
        if user:
            token = self.getToken(user)
            loginEntity.token = token.access_token                
            loginEntity.status = "ok"
        else:
            loginEntity.status = "no"

        serializer = LoginSerializer(loginEntity)
        return JsonResponse(serializer.data)

    def getToken(self, user):       
        token = RefreshToken.for_user(user)      
        return token

登陸的界面不需要驗證權限,所以將權限驗證設為空,這樣就不會進行Token的驗證了。
驗證前端傳過來的用戶名和密碼是否正確,如果正確通過getToken獲取token,然后返回給前端。
3.關聯url
在urlPatterns中添加登陸的url和View的關聯關系,這里用的url跟ADPV5要求的保持一致,省得轉換了。

urlpatterns = [  
    url(r'^api/login/account', UserLoginView.as_view()),  
]

4.用Postman進行調用測試

DRF后台實現登陸並返回JWT的過程很簡單,當然應該有更好的實現方式,暫時不知道,先這樣做了,等有更好的方法再改進。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM