1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # coding=utf-8
- import json
- from django.db import transaction
- from django.contrib.auth import get_user_model
- from rest_framework_jwt.views import ObtainJSONWebToken, VerifyJSONWebToken, RefreshJSONWebToken
- from rest_framework.serializers import ValidationError
- from utils import response_error, response_ok
- from rest_framework.views import APIView
- from utils.permission import IsStaff
- from apps.system.models import SysLog
- from apps.staff.serializers import StaffUserJWTSerializer
- User = get_user_model()
- class StaffUserLoginView(ObtainJSONWebToken):
- serializer_class = StaffUserJWTSerializer
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- ser.request = request
- if ser.is_valid(raise_exception=True):
- return response_ok(ser.validated_data)
- except ValidationError as e:
- return response_error(e.detail['error'][0])
- class StaffUserVerifyTokenView(VerifyJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class StaffUserRefreshTokenView(RefreshJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class ChangePasswordView(APIView):
- permission_classes = [IsStaff, ]
- def post(self, request):
- data = request.data
- new_password = data['new_password'].strip(' ')
- confirm_password = data['confirm_password'].strip(u' ')
- old_password = data['old_password'].strip(u' ')
- with transaction.atomic():
- request.user.change_password(new_password, confirm_password, old_password)
- request.user.save()
- SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改账户密码')
- return response_ok()
- class LogoutView(APIView):
- permission_classes = [IsStaff, ]
- def get(self, request):
- User.objects.filter(pk=request.user.pk).update(status=User.OFFLINE)
- return response_ok()
|