123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- # coding=utf-8
- from django.contrib.auth import get_user_model
- from rest_framework import serializers
- from rest_framework_jwt.settings import api_settings
- from apps.customer.models import *
- from apps.log.models import BizLog
- from apps.base import Formater
- User = get_user_model()
- jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
- jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
- class WechatLoginSerializer(serializers.Serializer):
- def validate(self, attrs):
- code = self.initial_data.get('code')
- appid = self.initial_data.get('appid')
- if code and appid:
- wx_customer = CustomerWechat.login(code, appid)
- if not wx_customer.customer:
- return {
- 'bind': 0,
- 'openid': wx_customer.openid
- }
- user = wx_customer.customer.user
- if not user.is_active:
- msg = '用户帐户已禁用.'
- raise serializers.ValidationError(msg)
- payload = jwt_payload_handler(user)
- BizLog.objects.addnew(user, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
- return {
- 'bind': 1,
- 'token': jwt_encode_handler(payload),
- 'openid': wx_customer.openid,
- 'name': wx_customer.customer.name or '',
- 'tel': wx_customer.customer.tel or '',
- 'face': wx_customer.customer.face and wx_customer.customer.face.get_path() or '',
- 'customer_id': wx_customer.customer.id,
- }
- else:
- msg = '参数无效'
- raise serializers.ValidationError(msg)
- class WechatBindSerializer(serializers.Serializer):
- def validate(self, attrs):
- appid = self.initial_data.get('appid')
- openid = self.initial_data.get('openid')
- phoneEncryptedData = self.initial_data.get('encryptedData')
- phoneIv = self.initial_data.get('iv')
- referrer = self.initial_data.get('referrer')
- if openid and phoneEncryptedData and phoneIv:
- customer = CustomerWechat.bindWechat(appid, openid, phoneEncryptedData, phoneIv, referrer)
- user = customer.user
- payload = jwt_payload_handler(user)
- BizLog.objects.addnew(user, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
- return {
- 'token': jwt_encode_handler(payload),
- 'name': customer.name or '',
- 'tel': customer.tel or '',
- 'face': customer.face and customer.face.get_path() or '',
- 'customer_id': customer.id,
- }
- else:
- msg = '参数无效'
- raise serializers.ValidationError(msg)
- class CustomerSerializer(serializers.ModelSerializer):
- gender_text = serializers.CharField(source='get_gender_display', read_only=True)
- is_distributor_text = serializers.SerializerMethodField()
- balance = serializers.SerializerMethodField()
- total_amount = serializers.SerializerMethodField()
- date_join = serializers.DateTimeField(source='user.date_joined', format='%Y-%m-%d %H:%M', read_only=True)
- class Meta:
- model = Customer
- fields = '__all__'
- def get_is_distributor_text(self, obj):
- if obj.is_distributor:
- return u'是'
- return u'否'
- def get_balance(self, obj):
- return Formater.formatAmountShow(obj.balance)
- def get_total_amount(self, obj):
- return Formater.formatAmountShow(obj.total_amount)
|