views.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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(is_active=True)
  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.is_active = False
  42. instance.username = u'%s|删除|%d' % (instance.username, instance.id)
  43. instance.save()
  44. return response_ok()
  45. @action(methods=['post'], detail=True)
  46. def reset_password(self, request, pk):
  47. with transaction.atomic():
  48. instance = self.get_object()
  49. instance.set_password('111111')
  50. instance.save()
  51. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'重置用户[%s]密码,id=%d' % (instance.username, instance.id))
  52. return response_ok()
  53. class ChangePasswordView(APIView):
  54. permission_classes = [IsAdministrator, ]
  55. def post(self, request):
  56. data = json.loads(request.body)
  57. new_password = data['new_password'].strip(' ')
  58. confirm_password = data['confirm_password'].strip(u' ')
  59. old_password = data['old_password'].strip(u' ')
  60. with transaction.atomic():
  61. request.user.change_password(new_password, confirm_password, old_password)
  62. request.user.save()
  63. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改账户密码')
  64. return response_ok()