serializers.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 Customer
  6. from apps.wechat.models import Wechat
  7. User = get_user_model()
  8. jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
  9. jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
  10. class WechatLoginSerializer(serializers.Serializer):
  11. def validate(self, attrs):
  12. code = self.initial_data.get('code')
  13. appid = self.initial_data.get('appid')
  14. if code and appid:
  15. customer = Customer.login(code, appid)
  16. if not customer.user:
  17. return {
  18. 'openid': customer.openid,
  19. }
  20. user = customer.user
  21. if not user.is_active:
  22. msg = '用户帐户已禁用.'
  23. raise serializers.ValidationError(msg)
  24. payload = jwt_payload_handler(user)
  25. return {
  26. 'token': jwt_encode_handler(payload),
  27. 'openid': customer.openid,
  28. 'name': user.name or '',
  29. 'tel': user.tel or '',
  30. 'face': user.face or '',
  31. }
  32. else:
  33. msg = '参数无效'
  34. raise serializers.ValidationError(msg)
  35. class WechatBindSerializer(serializers.Serializer):
  36. def validate(self, attrs):
  37. appid = self.initial_data.get('appid')
  38. openid = self.initial_data.get('openid')
  39. phoneEncryptedData = self.initial_data.get('encryptedData')
  40. phoneIv = self.initial_data.get('iv')
  41. if openid and phoneEncryptedData and phoneIv:
  42. customer = Customer.bindWechat(appid, openid, phoneEncryptedData, phoneIv)
  43. user = customer.user
  44. payload = jwt_payload_handler(user)
  45. return {
  46. 'token': jwt_encode_handler(payload),
  47. 'openid': customer.openid,
  48. 'name': user.name or '',
  49. 'tel': user.tel or '',
  50. 'face': user.face or '',
  51. }
  52. else:
  53. msg = '参数无效'
  54. raise serializers.ValidationError(msg)
  55. class StatementSerializer(serializers.ModelSerializer):
  56. class Meta:
  57. model = Wechat
  58. fields = ('privacy_statement', )
  59. class CustomerSerializer(serializers.ModelSerializer):
  60. class Meta:
  61. model = Customer
  62. fields = '__all__'