views.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # coding=utf-8
  2. import json
  3. from django.db import transaction
  4. from django.contrib.auth import get_user_model
  5. from rest_framework_jwt.views import ObtainJSONWebToken, VerifyJSONWebToken, RefreshJSONWebToken
  6. from rest_framework.serializers import ValidationError
  7. from utils import response_error, response_ok
  8. from rest_framework.views import APIView
  9. from utils.permission import IsStaff
  10. from apps.system.models import SysLog
  11. from apps.staff.serializers import StaffUserJWTSerializer
  12. User = get_user_model()
  13. class StaffUserLoginView(ObtainJSONWebToken):
  14. serializer_class = StaffUserJWTSerializer
  15. def post(self, request, *args, **kwargs):
  16. try:
  17. ser = self.serializer_class(data=request.data)
  18. ser.request = request
  19. if ser.is_valid(raise_exception=True):
  20. return response_ok(ser.validated_data)
  21. except ValidationError as e:
  22. return response_error(e.detail['error'][0])
  23. class StaffUserVerifyTokenView(VerifyJSONWebToken):
  24. def post(self, request, *args, **kwargs):
  25. try:
  26. ser = self.serializer_class(data=request.data)
  27. if ser.is_valid(raise_exception=True):
  28. return response_ok({'token': ser.validated_data['token']})
  29. except ValidationError as e:
  30. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  31. class StaffUserRefreshTokenView(RefreshJSONWebToken):
  32. def post(self, request, *args, **kwargs):
  33. try:
  34. ser = self.serializer_class(data=request.data)
  35. if ser.is_valid(raise_exception=True):
  36. return response_ok({'token': ser.validated_data['token']})
  37. except ValidationError as e:
  38. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  39. class ChangePasswordView(APIView):
  40. permission_classes = [IsStaff, ]
  41. def post(self, request):
  42. data = request.data
  43. new_password = data['new_password'].strip(' ')
  44. confirm_password = data['confirm_password'].strip(u' ')
  45. old_password = data['old_password'].strip(u' ')
  46. with transaction.atomic():
  47. request.user.change_password(new_password, confirm_password, old_password)
  48. request.user.save()
  49. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改账户密码')
  50. return response_ok()
  51. class LogoutView(APIView):
  52. permission_classes = [IsStaff, ]
  53. def get(self, request):
  54. User.objects.filter(pk=request.user.pk).update(status=User.OFFLINE)
  55. return response_ok()