views.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # coding=utf-8
  2. from django.contrib.auth import get_user_model
  3. from rest_framework_jwt.views import ObtainJSONWebToken, VerifyJSONWebToken, RefreshJSONWebToken
  4. from rest_framework.serializers import ValidationError
  5. from rest_framework.views import APIView
  6. from utils import response_error, response_ok
  7. from utils.permission import IsAdministrator
  8. #from utils.empower import checkLicence
  9. from apps.staff.serializers import AdminUserJWTSerializer
  10. from utils.exceptions import CustomError
  11. User = get_user_model()
  12. class AdminUserLoginView(ObtainJSONWebToken):
  13. serializer_class = AdminUserJWTSerializer
  14. def post(self, request, *args, **kwargs):
  15. #if not checkLicence():
  16. # raise CustomError(u'授权失败!')
  17. try:
  18. ser = self.serializer_class(data=request.data)
  19. ser.request = request
  20. if ser.is_valid(raise_exception=True):
  21. return response_ok(ser.validated_data)
  22. except ValidationError as e:
  23. return response_error(e.detail['error'][0])
  24. class AdminUserVerifyTokenView(VerifyJSONWebToken):
  25. def post(self, request, *args, **kwargs):
  26. try:
  27. ser = self.serializer_class(data=request.data)
  28. if ser.is_valid(raise_exception=True):
  29. return response_ok({'token': ser.validated_data['token']})
  30. except ValidationError as e:
  31. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  32. class AdminUserRefreshTokenView(RefreshJSONWebToken):
  33. def post(self, request, *args, **kwargs):
  34. try:
  35. ser = self.serializer_class(data=request.data)
  36. if ser.is_valid(raise_exception=True):
  37. return response_ok({'token': ser.validated_data['token']})
  38. except ValidationError as e:
  39. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  40. class LogoutView(APIView):
  41. permission_classes = [IsAdministrator, ]
  42. def get(self, request):
  43. User.objects.filter(pk=request.user.pk).update(status=User.OFFLINE)
  44. return response_ok()