serializers.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # coding=utf-8
  2. from django.contrib.auth import get_user_model
  3. from django.conf import settings
  4. from rest_framework import serializers
  5. from rest_framework_jwt.settings import api_settings
  6. from apps.customer.models import Customer
  7. from apps.wechat.models import Wechat
  8. User = get_user_model()
  9. jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
  10. jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
  11. class WechatLoginSerializer(serializers.Serializer):
  12. def validate(self, attrs):
  13. code = self.initial_data.get('code')
  14. appid = self.initial_data.get('appid')
  15. if code and appid:
  16. customer = Customer.login(code, appid)
  17. if not customer.user:
  18. return {
  19. 'openid': customer.openid,
  20. }
  21. user = customer.user
  22. if not user.is_active:
  23. msg = '用户帐户已禁用.'
  24. raise serializers.ValidationError(msg)
  25. payload = jwt_payload_handler(user)
  26. return {
  27. 'token': jwt_encode_handler(payload),
  28. 'openid': customer.openid,
  29. 'name': user.name or '',
  30. 'tel': user.tel or '',
  31. 'face': user.face or '',
  32. }
  33. else:
  34. msg = '参数无效'
  35. raise serializers.ValidationError(msg)
  36. class WechatBindSerializer(serializers.Serializer):
  37. def validate(self, attrs):
  38. appid = self.initial_data.get('appid')
  39. openid = self.initial_data.get('openid')
  40. phoneEncryptedData = self.initial_data.get('encryptedData')
  41. phoneIv = self.initial_data.get('iv')
  42. if openid and phoneEncryptedData and phoneIv:
  43. customer = Customer.bindWechat(appid, openid, phoneEncryptedData, phoneIv)
  44. user = customer.user
  45. payload = jwt_payload_handler(user)
  46. return {
  47. 'token': jwt_encode_handler(payload),
  48. 'openid': customer.openid,
  49. 'name': user.name or '',
  50. 'tel': user.tel or '',
  51. 'face': user.face or '',
  52. }
  53. else:
  54. msg = '参数无效'
  55. raise serializers.ValidationError(msg)
  56. class StatementSerializer(serializers.ModelSerializer):
  57. class Meta:
  58. model = Wechat
  59. fields = ('privacy_statement', )
  60. class CustomerSerializer(serializers.ModelSerializer):
  61. name = serializers.CharField(source='user.name', read_only=True)
  62. tel = serializers.CharField(source='user.tel', read_only=True)
  63. # gender_txt = serializers.SerializerMethodField()
  64. create_time = serializers.DateTimeField(source='user.date_joined', read_only=True)
  65. class Meta:
  66. model = Customer
  67. fields = ('name', 'tel', 'create_time', )
  68. # def get_gender_txt(self, obj):
  69. # if obj.user and obj.user.gender:
  70. # return settings.GENDER_CHOICES[obj.user.gender][1]
  71. # return u'未知'