views.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # coding=utf-8
  2. import requests
  3. from django.db import transaction
  4. from rest_framework.views import APIView
  5. from rest_framework import generics
  6. from rest_framework.decorators import action
  7. from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken,RefreshJSONWebToken
  8. from rest_framework.serializers import ValidationError
  9. from rest_framework import permissions
  10. from utils import response_ok, response_error
  11. from utils.exceptions import CustomError
  12. from utils.custom_modelviewset import CustomModelViewSet
  13. from utils.wx.WXBizDataCrypt import WXBizDataCrypt
  14. from utils.permission import IsCustomerUser
  15. from apps.images.models import Images
  16. from apps.customer.models import CustomerAddress
  17. from apps.customer.filters import CustomerAddressFilter
  18. from apps.foundation.models import Config
  19. from apps.account import tenant_log
  20. from .serializers import *
  21. class CustomerLoginView(APIView):
  22. serializer_class = CustomerMobileSignSerializer
  23. def post(self, request, *args, **kwargs):
  24. ser = self.serializer_class(data=request.data)
  25. if ser.is_valid():
  26. return response_ok(ser.validated_data)
  27. else:
  28. return response_error('参数错误')
  29. class CustomerRefreshTokenView(RefreshJSONWebToken):
  30. def post(self, request, *args, **kwargs):
  31. try:
  32. ser = self.serializer_class(data=request.data)
  33. if ser.is_valid(raise_exception=True):
  34. return response_ok({'token': ser.validated_data['token']})
  35. except ValidationError as e:
  36. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  37. class CustomerVerifyTokenView(VerifyJSONWebToken):
  38. def post(self, request, *args, **kwargs):
  39. try:
  40. ser = self.serializer_class(data=request.data)
  41. if ser.is_valid(raise_exception=True):
  42. return response_ok({'token': ser.validated_data['token']})
  43. except ValidationError as e:
  44. return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
  45. class WxLoginView(APIView):
  46. serializer_class = WechatLoginSerializer
  47. def post(self, request, *args, **kwargs):
  48. ser = self.serializer_class(data=request.data)
  49. if ser.is_valid():
  50. return response_ok(ser.validated_data)
  51. else:
  52. return response_error('参数错误')
  53. class WxBindView(APIView):
  54. serializer_class = WechatBindSerializer
  55. def post(self, request, *args, **kwargs):
  56. ser = self.serializer_class(data=request.data)
  57. if ser.is_valid():
  58. return response_ok(ser.validated_data)
  59. else:
  60. return response_error('参数错误')
  61. class SetUserInfoView(APIView):
  62. permission_classes = [IsCustomerUser, ]
  63. def post(self, request, *args, **kwargs):
  64. appid = request.POST.get('appid')
  65. openid = request.POST.get('openid')
  66. encryptedData = request.POST.get('encryptedData')
  67. iv = request.POST.get('iv')
  68. customer_wechat = CustomerWechat.objects.filter(openid=openid, wechat_app__authorizer_appid=appid).first()
  69. if not customer_wechat:
  70. raise CustomError(u'未找到相应的微信客户!')
  71. customer = request.customer
  72. if customer_wechat.customer and customer_wechat.customer.id != customer.id:
  73. raise CustomError(u'该微信已同步其他客户!')
  74. if not customer_wechat.customer:
  75. customer_wechat.customer = customer
  76. customer_wechat.save()
  77. pc = WXBizDataCrypt(customer_wechat.wechat_app.authorizer_appid, customer_wechat.session_key)
  78. result = pc.decrypt(encryptedData, iv)
  79. with transaction.atomic():
  80. customer.setInfo(result['nickName'], result['gender'], result['avatarUrl'])
  81. tenant_log(customer.user, BizLog.INSERT, u'客户设置信息,id=%d' % customer.id, result)
  82. return response_ok()
  83. class CustomerInfoView(generics.RetrieveAPIView):
  84. permission_classes = [IsCustomerUser, ]
  85. # queryset = Customer.objects.filter()
  86. serializer_class = CustomerSerializer
  87. def get_object(self):
  88. # queryset = self.filter_queryset(self.get_queryset())
  89. # obj = queryset.filter(id=self.request.customer.id).first()
  90. obj = self.request.customer
  91. return obj
  92. def retrieve(self, request, *args, **kwargs):
  93. instance = self.get_object()
  94. serializer = self.get_serializer(instance)
  95. return response_ok(serializer.data)