Advertisement
Guest User

Untitled

a guest
Oct 1st, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. from django.contrib.auth import get_user_model
  2. from rest_framework import serializers
  3. from acquaesapone.accounts.models import Account
  4. from django.contrib.auth.models import User
  5. from allaccess.models import Provider, AccountAccess
  6.  
  7.  
  8. class UserSerializer(serializers.ModelSerializer):
  9.  
  10. confirm_password = serializers.CharField(write_only=True)
  11. token = serializers.CharField(source='auth_token.key', read_only=True)
  12.  
  13. class Meta:
  14. model = get_user_model()
  15. fields = ('username', 'email', 'password', 'confirm_password', 'token')
  16. extra_kwargs = {
  17. 'password': {'write_only': True}
  18. }
  19.  
  20.  
  21. class RegistrationSerializer(serializers.ModelSerializer):
  22.  
  23. # to use fields from User Model
  24. user = UserSerializer()
  25.  
  26. class Meta:
  27. model = Account
  28. fields = ('user', 'address', 'phone_number', 'newsletter')
  29.  
  30. def validate(self, data):
  31. user_data = data.get('user')
  32.  
  33. # verify password and confirm password matching
  34. if user_data.get('password') != user_data.get('confirm_password'):
  35. raise serializers.ValidationError({"confirm_password": "Passwords don't match"})
  36.  
  37. return data
  38.  
  39. def create(self, validated_data):
  40. """
  41. Token model is saving using Signals i.e api.signals
  42. """
  43.  
  44. # save user model
  45. user_data = validated_data.pop('user')
  46.  
  47. user_data.pop('confirm_password')
  48. password = user_data.pop('password', None)
  49. user = User(**user_data)
  50.  
  51. if password is not None:
  52. user.set_password(password)
  53. user.save()
  54.  
  55. # save account model
  56. return Account.objects.create(user=user, **validated_data)
  57.  
  58.  
  59. class LoginSerializer(serializers.Serializer):
  60.  
  61. username = serializers.CharField()
  62. password = serializers.CharField()
  63. list_field = serializers.ListField(child=serializers.IntegerField())
  64.  
  65. class Meta:
  66. model = get_user_model()
  67. fields = ('username', 'password', 'list_field')
  68.  
  69.  
  70. class SocialLoginSerializer(serializers.ModelSerializer):
  71.  
  72. PROVIDERS = Provider.objects.values_list('name', flat=True)
  73.  
  74. email = serializers.EmailField()
  75. token = serializers.CharField(source='auth_token.key', read_only=True)
  76. provider = serializers.ChoiceField(choices=PROVIDERS, write_only=True)
  77. identifier = serializers.CharField(write_only=True)
  78.  
  79. class Meta:
  80. model = get_user_model()
  81. fields = ('first_name', 'last_name', 'email', 'token', 'provider', 'identifier')
  82.  
  83. def create(self, validated_data):
  84.  
  85. # check if user is already registered with this email using this provider
  86.  
  87. # create or update user
  88. user, created = get_user_model().objects.update_or_create(
  89. email=validated_data.get('email'),
  90. accountaccess__provider__name=validated_data.get('provider'),
  91. defaults={'first_name': validated_data.get('first_name', None),
  92. 'last_name': validated_data.get('last_name', None),
  93. 'username':'%s-%s' % (validated_data.get('identifier'), validated_data.get('provider'))}
  94. )
  95.  
  96. # if new user was created above then create associated social profile
  97. if created:
  98. AccountAccess.objects.create(
  99. provider=Provider.objects.get(name=validated_data.get('provider')),
  100. identifier=validated_data.get('identifier'),
  101. user=user
  102. )
  103.  
  104. return user
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement