views.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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.views import APIView
  6. from rest_framework.serializers import ValidationError
  7. from rest_framework_jwt.views import ObtainJSONWebToken, RefreshJSONWebToken
  8. from utils import response_error, response_ok, get_remote_addr
  9. from utils.permission import IsEmployee
  10. from utils.custom_modelviewset import CustomModelViewSet
  11. from utils.exceptions import CustomError
  12. from apps.employee.serializers import JWTSerializer, EmployeeSerializer
  13. from apps.employee.filters import EmployeeFilter
  14. from apps.employee.models import Employee
  15. from apps.log.models import BizLog
  16. User = get_user_model()
  17. class LoginView(ObtainJSONWebToken):
  18. serializer_class = JWTSerializer
  19. def post(self, request, *args, **kwargs):
  20. '''
  21. 职工登录
  22. :param:
  23. :return:
  24. '''
  25. try:
  26. ser = self.serializer_class(data=request.data)
  27. ser.request = request
  28. if ser.is_valid(raise_exception=True):
  29. return response_ok(ser.validated_data)
  30. except ValidationError as e:
  31. return response_error(e.detail['error'][0])
  32. except CustomError as e:
  33. return response_error(str(e))
  34. class RefreshTokenView(RefreshJSONWebToken):
  35. def post(self, request, *args, **kwargs):
  36. try:
  37. ser = self.serializer_class(data=request.data)
  38. if ser.is_valid(raise_exception=True):
  39. data = {
  40. 'token': ser.validated_data['token'],
  41. 'user_id': ser.validated_data['user'].id,
  42. 'username': ser.validated_data['user'].username
  43. }
  44. return response_ok(data)
  45. except ValidationError as e:
  46. return response_ok({'error': True})
  47. except CustomError as e:
  48. return response_error(str(e))
  49. class ChangePasswrodView(APIView):
  50. permission_classes = [IsEmployee, ]
  51. def post(self, request):
  52. '''
  53. 职工修改密码
  54. :param request:
  55. :return:
  56. '''
  57. data = json.loads(request.body)
  58. with transaction.atomic():
  59. request.user.change_password(data['new_password'], data['confirm_password'], data['old_password'])
  60. request.user.save()
  61. BizLog.objects.addnew(request.user, BizLog.INSERT, u'[%s]修改密码,IP[%s]' % (request.user.username, get_remote_addr(self.request)))
  62. return response_ok()
  63. class EmployeeViewSet(CustomModelViewSet):
  64. permission_classes = [IsEmployee, ]
  65. queryset = Employee.objects.filter()
  66. serializer_class = EmployeeSerializer
  67. def filter_queryset(self, queryset):
  68. queryset = queryset.filter()
  69. f = EmployeeFilter(self.request.GET, queryset=queryset)
  70. return f.qs
  71. def perform_create(self, serializer):
  72. super(EmployeeViewSet, self).perform_create(serializer)
  73. instance = serializer.instance
  74. validated_data = serializer.validated_data
  75. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'添加职工[%s],id=%d' % (instance.name, instance.id), validated_data)
  76. def perform_update(self, serializer):
  77. super(EmployeeViewSet, self).perform_update(serializer)
  78. instance = serializer.instance
  79. validated_data = serializer.validated_data
  80. BizLog.objects.addnew(self.request.user, BizLog.UPDATE, u'修改职工信息[%s],id=%d' % (instance.name, instance.id), validated_data)