1. 程式人生 > 實用技巧 >Ant Design Pro V5 + Django Restful Framework Token認證後臺實現(二)

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

Python,Django,Django Restful framework和Django Restful frameworkSimple-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的過程很簡單,當然應該有更好的實現方式,暫時不知道,先這樣做了,等有更好的方法再改進。