serializers.py 2.1 KB

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