views.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # coding=utf-8
  2. from django.db import transaction
  3. from rest_framework.views import APIView
  4. from rest_framework_jwt.views import VerifyJSONWebToken,RefreshJSONWebToken
  5. from rest_framework.serializers import ValidationError
  6. from utils import response_ok, response_error
  7. from utils.permission import IsCustomer
  8. from apps.customer.serializers import WechatLoginSerializer, WechatBindSerializer
  9. from apps.log.models import BizLog
  10. class WxLoginView(APIView):
  11. serializer_class = WechatLoginSerializer
  12. def post(self, request, *args, **kwargs):
  13. ser = self.serializer_class(data=request.data)
  14. if ser.is_valid():
  15. return response_ok(ser.validated_data)
  16. else:
  17. return response_error('参数错误')
  18. class WxBindView(APIView):
  19. serializer_class = WechatBindSerializer
  20. def post(self, request, *args, **kwargs):
  21. ser = self.serializer_class(data=request.data)
  22. if ser.is_valid():
  23. return response_ok(ser.validated_data)
  24. else:
  25. return response_error('参数错误')
  26. class SetUserInfoView(APIView):
  27. permission_classes = [IsCustomer, ]
  28. def post(self, request, *args, **kwargs):
  29. appid = request.POST.get('appid')
  30. openid = request.POST.get('openid')
  31. encryptedData = request.POST.get('encryptedData')
  32. iv = request.POST.get('iv')
  33. with transaction.atomic():
  34. face, name = request.customer.setInfo(appid, openid, encryptedData, iv)
  35. return response_ok({'face': face, 'name': name})
  36. class CustomerRefreshTokenView(RefreshJSONWebToken):
  37. def post(self, request, *args, **kwargs):
  38. try:
  39. ser = self.serializer_class(data=request.data)
  40. if ser.is_valid(raise_exception=True):
  41. return response_ok({'token': ser.validated_data['token']})
  42. except ValidationError as e:
  43. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  44. class CustomerVerifyTokenView(VerifyJSONWebToken):
  45. def post(self, request, *args, **kwargs):
  46. try:
  47. ser = self.serializer_class(data=request.data)
  48. if ser.is_valid(raise_exception=True):
  49. return response_ok({'token': ser.validated_data['token']})
  50. except ValidationError as e:
  51. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')