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的过程很简单,当然应该有更好的实现方式,暂时不知道,先这样做了,等有更好的方法再改进。

原文地址:https://www.cnblogs.com/Farseer1215/p/14194365.html