views.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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.decorators import action
  6. from utils.permission import IsAdministrator
  7. from utils import response_error, response_ok
  8. from utils.custom_modelviewset import CustomModelViewSet
  9. from utils.exceptions import CustomError
  10. from rest_framework.views import APIView
  11. from apps.staff.serializers import UserSerializer
  12. from apps.staff.filters import UserFilter
  13. from apps.system.models import SysLog
  14. from apps.examination.exam.models import ExamLog
  15. User = get_user_model()
  16. class UserViewSet(CustomModelViewSet):
  17. permission_classes = [IsAdministrator, ]
  18. queryset = User.objects.filter()
  19. serializer_class = UserSerializer
  20. def filter_queryset(self, queryset):
  21. f = UserFilter(self.request.GET, queryset=queryset)
  22. return f.qs
  23. def perform_create(self, serializer):
  24. super(UserViewSet, self).perform_create(serializer)
  25. instance = serializer.instance
  26. validated_data = serializer.validated_data
  27. SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加账户[%s],id=%d' % (instance.username, instance.id), validated_data)
  28. def perform_update(self, serializer):
  29. super(UserViewSet, self).perform_update(serializer)
  30. instance = serializer.instance
  31. validated_data = serializer.validated_data
  32. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改账户[%s],id=%d' % (instance.username, instance.id), validated_data)
  33. def destroy(self, request, *args, **kwargs):
  34. with transaction.atomic():
  35. instance = self.get_object()
  36. log_count = SysLog.objects.filter(user_id=instance.id).count()
  37. exam_log_count = ExamLog.objects.filter(user_id=instance.id).count()
  38. if log_count > 0 or exam_log_count > 0:
  39. raise CustomError(u'该账号有使用记录,禁止删除!')
  40. SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除用户[%s],id=%d' % (instance.username, instance.id))
  41. instance.delete()
  42. return response_ok()
  43. @action(methods=['post'], detail=True)
  44. def reset_password(self, request, pk):
  45. with transaction.atomic():
  46. instance = self.get_object()
  47. instance.set_password('111111')
  48. instance.save()
  49. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'重置用户[%s]密码,id=%d' % (instance.username, instance.id))
  50. return response_ok()
  51. class ChangePasswordView(APIView):
  52. permission_classes = [IsAdministrator, ]
  53. def post(self, request):
  54. data = json.loads(request.body)
  55. new_password = data['new_password'].strip(' ')
  56. confirm_password = data['confirm_password'].strip(u' ')
  57. old_password = data['old_password'].strip(u' ')
  58. with transaction.atomic():
  59. request.user.change_password(new_password, confirm_password, old_password)
  60. request.user.save()
  61. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改账户密码')
  62. return response_ok()