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