123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- # coding=utf-8
- from django.contrib.auth import get_user_model
- from django.conf import settings
- from rest_framework import serializers
- from rest_framework_jwt.settings import api_settings
- from apps.customer.models import Customer
- from apps.wechat.models import Wechat
- 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:
- customer = Customer.login(code, appid)
- if not customer.user:
- return {
- 'openid': customer.openid,
- }
- user = customer.user
- if not user.is_active:
- msg = '用户帐户已禁用.'
- raise serializers.ValidationError(msg)
- payload = jwt_payload_handler(user)
- return {
- 'token': jwt_encode_handler(payload),
- 'openid': customer.openid,
- 'name': user.name or '',
- 'tel': user.tel or '',
- 'face': user.face or '',
- }
- 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')
- if openid and phoneEncryptedData and phoneIv:
- customer = Customer.bindWechat(appid, openid, phoneEncryptedData, phoneIv)
- user = customer.user
- payload = jwt_payload_handler(user)
- return {
- 'token': jwt_encode_handler(payload),
- 'openid': customer.openid,
- 'name': user.name or '',
- 'tel': user.tel or '',
- 'face': user.face or '',
- }
- else:
- msg = '参数无效'
- raise serializers.ValidationError(msg)
- class StatementSerializer(serializers.ModelSerializer):
- class Meta:
- model = Wechat
- fields = ('privacy_statement', )
- class CustomerSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='user.name', read_only=True)
- tel = serializers.CharField(source='user.tel', read_only=True)
- # gender_txt = serializers.SerializerMethodField()
- create_time = serializers.DateTimeField(source='user.date_joined', read_only=True)
- class Meta:
- model = Customer
- fields = ('name', 'tel', 'create_time', )
- # def get_gender_txt(self, obj):
- # if obj.user and obj.user.gender:
- # return settings.GENDER_CHOICES[obj.user.gender][1]
- # return u'未知'
|