serializers.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # coding=utf-8
  2. from django.contrib.auth import get_user_model
  3. from rest_framework import serializers
  4. from rest_framework_jwt.settings import api_settings
  5. from apps.customer.models import *
  6. from apps.order.models import ShoppingCart
  7. from apps.log.models import BizLog
  8. from apps.base import Formater
  9. User = get_user_model()
  10. jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
  11. jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
  12. class WechatLoginSerializer(serializers.Serializer):
  13. def validate(self, attrs):
  14. code = self.initial_data.get('code')
  15. appid = self.initial_data.get('appid')
  16. if code and appid:
  17. wx_customer = CustomerWechat.login(code, appid)
  18. if not wx_customer.customer:
  19. return {
  20. 'bind': 0,
  21. 'openid': wx_customer.openid
  22. }
  23. user = wx_customer.customer.user
  24. if not user.is_active:
  25. msg = '用户帐户已禁用.'
  26. raise serializers.ValidationError(msg)
  27. payload = jwt_payload_handler(user)
  28. BizLog.objects.addnew(user, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
  29. return {
  30. 'bind': 1,
  31. 'token': jwt_encode_handler(payload),
  32. 'openid': wx_customer.openid,
  33. 'name': wx_customer.customer.name or '',
  34. 'tel': wx_customer.customer.tel or '',
  35. 'face': wx_customer.customer.face or '',
  36. 'customer_id': wx_customer.customer.id,
  37. }
  38. else:
  39. msg = '参数无效'
  40. raise serializers.ValidationError(msg)
  41. class WechatBindSerializer(serializers.Serializer):
  42. def validate(self, attrs):
  43. appid = self.initial_data.get('appid')
  44. openid = self.initial_data.get('openid')
  45. phoneEncryptedData = self.initial_data.get('encryptedData')
  46. phoneIv = self.initial_data.get('iv')
  47. referrer = self.initial_data.get('referrer')
  48. if openid and phoneEncryptedData and phoneIv:
  49. customer = CustomerWechat.bindWechat(appid, openid, phoneEncryptedData, phoneIv, referrer)
  50. user = customer.user
  51. payload = jwt_payload_handler(user)
  52. BizLog.objects.addnew(user, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
  53. return {
  54. 'token': jwt_encode_handler(payload),
  55. 'name': customer.name or '',
  56. 'tel': customer.tel or '',
  57. 'face': customer.face or '',
  58. 'customer_id': customer.id,
  59. }
  60. else:
  61. msg = '参数无效'
  62. raise serializers.ValidationError(msg)
  63. class CustomerSerializer(serializers.ModelSerializer):
  64. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  65. is_distributor_text = serializers.SerializerMethodField()
  66. balance = serializers.SerializerMethodField()
  67. total_amount = serializers.SerializerMethodField()
  68. date_join = serializers.DateTimeField(source='user.date_joined', format='%Y-%m-%d %H:%M', read_only=True)
  69. class Meta:
  70. model = Customer
  71. fields = '__all__'
  72. def get_is_distributor_text(self, obj):
  73. if obj.is_distributor:
  74. return u'是'
  75. return u'否'
  76. def get_balance(self, obj):
  77. return Formater.formatValueShow(obj.balance)
  78. def get_total_amount(self, obj):
  79. return Formater.formatValueShow(obj.total_amount)