Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.contrib.auth import get_user_model
- from rest_framework import serializers
- from acquaesapone.accounts.models import Account
- from django.contrib.auth.models import User
- from allaccess.models import Provider, AccountAccess
- class UserSerializer(serializers.ModelSerializer):
- confirm_password = serializers.CharField(write_only=True)
- token = serializers.CharField(source='auth_token.key', read_only=True)
- class Meta:
- model = get_user_model()
- fields = ('username', 'email', 'password', 'confirm_password', 'token')
- extra_kwargs = {
- 'password': {'write_only': True}
- }
- class RegistrationSerializer(serializers.ModelSerializer):
- # to use fields from User Model
- user = UserSerializer()
- class Meta:
- model = Account
- fields = ('user', 'address', 'phone_number', 'newsletter')
- def validate(self, data):
- user_data = data.get('user')
- # verify password and confirm password matching
- if user_data.get('password') != user_data.get('confirm_password'):
- raise serializers.ValidationError({"confirm_password": "Passwords don't match"})
- return data
- def create(self, validated_data):
- """
- Token model is saving using Signals i.e api.signals
- """
- # save user model
- user_data = validated_data.pop('user')
- user_data.pop('confirm_password')
- password = user_data.pop('password', None)
- user = User(**user_data)
- if password is not None:
- user.set_password(password)
- user.save()
- # save account model
- return Account.objects.create(user=user, **validated_data)
- class LoginSerializer(serializers.Serializer):
- username = serializers.CharField()
- password = serializers.CharField()
- list_field = serializers.ListField(child=serializers.IntegerField())
- class Meta:
- model = get_user_model()
- fields = ('username', 'password', 'list_field')
- class SocialLoginSerializer(serializers.ModelSerializer):
- PROVIDERS = Provider.objects.values_list('name', flat=True)
- email = serializers.EmailField()
- token = serializers.CharField(source='auth_token.key', read_only=True)
- provider = serializers.ChoiceField(choices=PROVIDERS, write_only=True)
- identifier = serializers.CharField(write_only=True)
- class Meta:
- model = get_user_model()
- fields = ('first_name', 'last_name', 'email', 'token', 'provider', 'identifier')
- def create(self, validated_data):
- # check if user is already registered with this email using this provider
- # create or update user
- user, created = get_user_model().objects.update_or_create(
- email=validated_data.get('email'),
- accountaccess__provider__name=validated_data.get('provider'),
- defaults={'first_name': validated_data.get('first_name', None),
- 'last_name': validated_data.get('last_name', None),
- 'username':'%s-%s' % (validated_data.get('identifier'), validated_data.get('provider'))}
- )
- # if new user was created above then create associated social profile
- if created:
- AccountAccess.objects.create(
- provider=Provider.objects.get(name=validated_data.get('provider')),
- identifier=validated_data.get('identifier'),
- user=user
- )
- return user
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement