コード例 #1
0
class CompanySerializer(serializers.ModelSerializer):

    phone = PhoneNumberField()

    tel = PhoneNumberField()

    class Meta:
        model = Company
        fields = '__all__'
コード例 #2
0
class TestAttendeeRegisterSerializer(AbstractRegistrationSerializer):
    email = serializers.EmailField(required=False)
    phone_number = PhoneNumberField(max_length=20, required=True)

    def custom_signup(self, request, user):
        super().custom_signup(request, user)

    def get_cleaned_data(self):
        cleaned_data = super().get_cleaned_data()
        # case where phone is not required we need to auto generate phone number unique and save
        cleaned_data.update({
            'email':
            self.validated_data.get('email', generate_dummy_email()),
            'phone_number':
            self.validated_data.get('phone_number')
        })
        return cleaned_data

    def save(self, request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request, user, self)
        self.custom_signup(request, user)
        setup_user_email(request, user, [])
        return user
コード例 #3
0
class CustomRegisterSerializer(RegisterSerializer):
    first_name = serializers.CharField(required=True, write_only=True)
    last_name = serializers.CharField(required=True, write_only=True)
    birth_date = serializers.CharField(required=True, write_only=True)
    phone_number = PhoneNumberField(
        required=True,
        write_only=True,
        validators=[
            UniqueValidator(
                queryset=Profile.objects.all(),
                message=_(
                    "A user is already registered with this phone number."),
            )
        ],
    )

    def get_cleaned_data_profile(self):
        return {
            "first_name": self.validated_data.get("first_name", ""),
            "last_name": self.validated_data.get("last_name", ""),
            "birth_date": self.validated_data.get("birth_date", ""),
            "phone_number": self.validated_data.get("phone_number", ""),
        }

    def create_profile(self, user, validated_data):
        user.first_name = self.validated_data.get("first_name")
        user.last_name = self.validated_data.get("last_name")
        user.save()

        user.profile.birth_date = self.validated_data.get("birth_date")
        user.profile.phone_number = self.validated_data.get("phone_number")
        user.profile.save()

    def custom_signup(self, request, user):
        self.create_profile(user, self.get_cleaned_data_profile())
コード例 #4
0
class ChangePhoneNumberSerializer(
    ErrorDictMixin, AllowedMobilePrefixMixin, serializers.Serializer
):
    phone_number = PhoneNumberField()

    @property
    def user(self):
        return self.context['request'].user

    def validate_phone_number(self, phone_number):
        if self.user.phone_number == phone_number:
            raise serializers.ValidationError(
                _('The new phone number must be different than the old one.')
            )
        org = self.context['view'].organization
        mobile_prefixes = org.radius_settings.allowed_mobile_prefixes_list
        if not self.is_prefix_allowed(phone_number, mobile_prefixes):
            raise serializers.ValidationError(
                _('This international mobile prefix is not allowed.')
            )
        return phone_number

    def save(self):
        # we do not update the phone number of the user
        # yet, tha will be done by the phone token validation view
        # once the phone number has been validated
        # at this point we flag the user as unverified again
        self.user.registered_user.is_verified = False
        self.user.registered_user.save()
コード例 #5
0
class LoginSerializer(serializers.ModelSerializer):
    password = serializers.CharField(style={'input_type': 'password'})
    phone_number = PhoneNumberField(required=True)

    class Meta:
        model = Account
        fields = ('phone_number', 'password')
コード例 #6
0
class UserSerializer(serializers.ModelSerializer):
    phone_number = PhoneNumberField(required=True)
    new_password = serializers.CharField(write_only=True)
    confirm_new_password = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = (
            'id',
            'display_name',
            'phone_number',
            'email',
            'is_active',
            'is_staff',
            'is_superuser',
            'new_password',
            'confirm_new_password',
        )

    def validate(self, attrs):
        if self.context['request'].method == "POST":
            if attrs.get('new_password') != attrs.get('confirm_new_password'):
                raise serializers.ValidationError({
                    "new_password":
                    _("Passwords are not equal."),
                    "confirm_new_password":
                    _("Passwords are not equal."),
                })
            attrs.pop('confirm_new_password')
            attrs['password'] = attrs.pop('new_password')
        return attrs

    def create(self, validated_data):
        return User.objects.create_user(**validated_data)
コード例 #7
0
class UserSerializer(serializers.ModelSerializer):
    """Serializer for the user objects"""
    location = serializers.PrimaryKeyRelatedField(
        required=False,
        queryset=Location.objects.all(),
        allow_null=True
    )
    picture = serializers.ImageField(
        max_length=None, use_url=True
    )
    phone = PhoneNumberField(required=False)

    class Meta:
        model = get_user_model()
        fields = (
            'id', 'email', 'name',
            'phone', 'location', 'picture',
            'date_created'
        )
        extra_kwargs = {
            'id': {'read_only': True},
            'email': {'read_only': True},
            'name': {'read_only': True},
            'date_created': {'read_only': True}
        }
コード例 #8
0
class PhoneVerificationSerializer(serializers.Serializer):
    phone_number = PhoneNumberField()
    session_token = serializers.CharField(required=True)
    security_code = serializers.CharField(required=True)

    def validate(self, attrs):
        attrs = super().validate(attrs)
        phone_number = attrs.get("phone_number", None)
        security_code = attrs.get("security_code", None)
        session_token = attrs.get("session_token", None)

        phone_verification_service = PhoneVerificationService()
        verification = phone_verification_service.validate_security_code(
            security_code, phone_number, session_token)

        if verification == phone_verification_service.SECURITY_CODE_INVALID:
            raise CustomAPIException('Security code is not valid')
        elif verification == phone_verification_service.SESSION_TOKEN_INVALID:
            raise CustomAPIException('Session token is not valid')
        elif verification == phone_verification_service.SECURITY_CODE_EXPIRED:
            raise CustomAPIException('Security code has expired')
        elif verification == phone_verification_service.SECURITY_CODE_VERIFIED:
            raise CustomAPIException('Security code is already verified')

        return attrs
コード例 #9
0
ファイル: serializers.py プロジェクト: floydya/ink-crm
class PhoneSerializer(serializers.ModelSerializer):
    number = PhoneNumberField(required=True)
    verification_code = serializers.CharField(required=False)

    class Meta:
        model = Phone
        fields = (
            'id',
            'customer',
            'number',
            'verification_code',
            'generated_at',
            'confirmed',
        )
        read_only_fields = ('id', 'customer', 'generated_at', 'confirmed')

    def validate(self, attrs):
        if (verification_code := attrs.pop('verification_code',
                                           None)) is not None:
            if verification_code != self.instance.verification_code:
                raise serializers.ValidationError(
                    {"verification_code": "Пин-код введен неверно"})
            else:
                attrs['confirmed'] = True
        return attrs
コード例 #10
0
class PhoneVerificationCodeSerializer(serializers.ModelSerializer):
    """
    Base serializer for phone verification.
    """
    phone_number = PhoneNumberField(
        write_only=True,
        error_messages={
            'invalid':
            _('Phone number must starts with + and contain only numbers.')
        })

    class Meta:
        model = PhoneVerificationCode

    def validate_phone_number(self, value):
        """
        Check if phone exists and not verified.
        """
        try:
            self.phone = Phone.objects.only(
                'user__id', 'phone_number',
                'is_verified').select_related('user').get(phone_number=value)

            if self.phone.is_verified:
                raise serializers.ValidationError(
                    _('This phone number is already verified.'),
                    code=status.HTTP_400_BAD_REQUEST)
        except Phone.DoesNotExist:
            raise serializers.ValidationError(
                _('This phone number is not in the database.'),
                code=status.HTTP_404_NOT_FOUND)

        return value
コード例 #11
0
class PhoneDetailSerializer(serializers.ModelSerializer):
    """
    Serializer for phone model.
    """
    phone_number = PhoneNumberField(
        validators=[
            UniqueValidator(
                queryset=Phone.objects.all(),
                message=_('Someone is already using this phone number.'))
        ],
        error_messages={
            'invalid':
            _('Phone number must starts with + and contain only numbers.')
        })

    class Meta:
        model = Phone
        fields = ('phone_number', )

    def update(self, instance, validated_data):
        """
        Set phone number as unverified on at update.
        """
        instance.phone_number = validated_data.get('phone_number')
        instance.is_verified = False
        instance.save()
        return instance
コード例 #12
0
class PhoneListSerializer(serializers.ModelSerializer):
    """
    Serializer for Phone model.
    """
    phone_number = PhoneNumberField(
        validators=[
            UniqueValidator(
                queryset=Phone.objects.all(),
                message=_('Someone is already using this phone number.'))
        ],
        error_messages={
            'invalid':
            _('Phone number must starts with + and contain only numbers.')
        })

    class Meta:
        model = Phone
        fields = '__all__'
        extra_kwargs = {
            'user': {
                'read_only': True,
                'default': serializers.CurrentUserDefault()
            },
            'is_verified': {
                'read_only': True
            }
        }
コード例 #13
0
class ReminderRequestSerializer(TrackingSerializer, ActionSerializer):
    phone = PhoneNumberField(required=False)
    zipcode = serializers.CharField(validators=[zip_validator])
    state = serializers.ChoiceField(
        choices=STATES, required=True, validators=[state_code_validator]
    )

    class Meta:
        model = ReminderRequest
        minimum_necessary_fields = [
            "first_name",
            "last_name",
            "address1",
            "city",
            "state",
            "zipcode",
            "date_of_birth",
            "email",
        ]
        optional_fields = [
            "address2",
            "phone",
            "sms_opt_in",
            "sms_opt_in_subscriber",
            "utm_campaign",
            "utm_source",
            "utm_medium",
            "utm_term",
            "utm_content",
            "source",
            "embed_url",
            "session_id",
            "email_referrer",
            "mobile_referrer",
        ]
コード例 #14
0
class DriverSerializer(serializers.ModelSerializer):
    phone = PhoneNumberField()

    class Meta:
        model = Driver
        fields = ('id', 'email', 'name', 'phone', 'password', 'user_type',
                  'photo', 'seller_id', 'status')

        extra_kwargs = {
            'password': {
                'write_only': True
            },
            'first_name': {
                'required': False
            },
            'last_name': {
                'required': False
            },
            'terms_of_use': {
                'required': False
            },
            'photo': {
                'required': False
            },
        }
コード例 #15
0
class UserFullSerializer(serializers.ModelSerializer):
    phone = PhoneNumberField(required=False,
                             validators=[UniqueValidator(User.objects.all())])
    email = serializers.EmailField(
        required=False, validators=[UniqueValidator(User.objects.all())])
    full_name = serializers.SerializerMethodField()
    change_password = serializers.SerializerMethodField()

    def get_full_name(self, obj):
        return obj.get_full_name()

    def get_change_password(self, obj):
        return obj.get_change_password()

    class Meta:
        model = User
        fields = (
            'id',
            'username',
            'full_name',
            'first_name',
            'middle_name',
            'last_name',
            'gender',
            'phone',
            'email',
            'photo',
            'change_password',
            'birthday',
            'last_login',
            'date_joined',
        )
        read_only_fields = ('id', 'full_name', 'photo', 'last_login',
                            'date_joined')
コード例 #16
0
class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)
    token = serializers.SerializerMethodField(read_only=True)
    phone_number = PhoneNumberField(required=False)
    avatar = serializers.ImageField(required=False, write_only=True)
    avatar_url = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = CustomUser
        fields = (
            "name",
            "email",
            "password",
            "phone_number",
            "token",
            "avatar",
            "avatar_url",
        )

    def get_token(self, obj=None):
        return str(obj.auth_token)

    def get_avatar_url(self, user):
        request = self.context.get("request")
        if user.avatar:
            avatar_url = user.avatar.url
            return request.build_absolute_uri(avatar_url)
        return None
コード例 #17
0
ファイル: serializers.py プロジェクト: gahan9/hr_mgmt
class UserSerializer(serializers.ModelSerializer):
    """ User serializer """
    has_plan = PrimaryKeyRelatedField(queryset=Plan.objects.all())
    contact_number = PhoneNumberField(style={'placeholder': 'Contact Number', 'hide_label': True})
    first_name = serializers.CharField(
        style={'placeholder': 'First Name', 'hide_label': True})
    last_name = serializers.CharField(
        style={'placeholder': 'Last Name', 'hide_label': True})
    email = serializers.CharField(
        style={'placeholder': 'Email Address', 'hide_label': True})
    gender = serializers.ChoiceField(
        choices=UserModel.GENDER_CHOICE,
        style={'placeholder': 'Select Gender', 'hide_label': True})
    password = serializers.CharField(
        max_length=190,
        style={'input_type': 'password', 'placeholder': 'Password', 'hide_label': True})
    profile_image = Base64ImageField(
        required=False,
        style={'class': 'form-control clearablefileinput', 'placeholder': 'Profile Image'})

    def update(self, instance, validated_data):
        if 'password' in validated_data:
            validated_data['password'] = set_password_hash(validated_data["password"])
        return super(UserSerializer, self).update(instance, validated_data)

    def create(self, validated_data):
        validated_data['password'] = set_password_hash(validated_data["password"])
        return super(UserSerializer, self).create(validated_data)

    class Meta:
        model = User
        fields = ['url', 'id', 'contact_number', 'first_name', 'last_name', 'gender', 'profile_image', 'email',
                  'password', 'role', 'registration_date', 'has_plan']
        read_only_fields = ['has_plan']
        write_only_fields = ('password', )
コード例 #18
0
class SellerSerializer(serializers.ModelSerializer):
    phone = PhoneNumberField()

    class Meta:
        model = Seller
        fields = ('id', 'email', 'store', 'describtion', 'phone', 'photo',
                  'password', 'terms_of_use', 'user_type', 'credit_card',
                  'cash', 'k_net', 'deivery_method')

        extra_kwargs = {
            'password': {
                'write_only': True
            },
            'terms_of_use': {
                'required': True
            },
            'phone': {
                'required': True
            },
        }

    def validate(self, data):
        context = dict()
        if not data["credit_card"] and not data["cash"] and not data["k_net"]:
            context['error'] = _("You must choose your payment methods")
            raise serializers.ValidationError(context)
        return data
コード例 #19
0
class ChangePhoneNumberSerializer(ErrorDictMixin, serializers.Serializer):
    phone_number = PhoneNumberField()

    @property
    def user(self):
        return self.context['request'].user

    def validate_phone_number(self, phone_number):
        if self.user.phone_number == phone_number:
            raise serializers.ValidationError(
                _('The new phone number must be '
                  'different than the old one.'))
        return phone_number

    def validate(self, data):
        self.user.phone_number = data['phone_number']
        try:
            self.user.full_clean()
        except ValidationError as e:
            raise serializers.ValidationError(self._get_error_dict(e))
        return data

    def save(self):
        self.user.is_active = False
        self.user.save()
コード例 #20
0
class UpdateSellerProfileSerializer(serializers.ModelSerializer):
    phone = PhoneNumberField()

    class Meta:
        model = Seller
        fields = ('describtion', 'cash', 'credit_card', 'k_net', 'email',
                  'phone', 'photo', 'cover', 'store')
コード例 #21
0
class ProductItemsSerializer(serializers.Serializer):
    products = serializers.ListField(child=ProductItemSerializer())
    name = serializers.CharField(max_length=250)
    phone = PhoneNumberField()
    email = serializers.EmailField()
    address = serializers.CharField()

    class Meta:
        list_serializer_class = ProductItemSerializer

    def create(self, validated_data):
        products = validated_data.get('products')
        print('product', products)

        order = Order.objects.create(
            status='pending',
            order_date=datetime.datetime.now(),
            email=validated_data['email'],
            phone=validated_data['phone'],
            name=validated_data['name'],
            address=validated_data['address'],
        )
        total = 0
        for selected_product in products:
            print('selected_product.get(id)', selected_product.get('id'))
            print('selected_product.get(quantity)',
                  selected_product.get('quantity'))
            product = Product.objects.get(id=selected_product.get('id'))
            print('product', product.price)

            OrderItem.objects.bulk_create([
                OrderItem(
                    order=order,
                    cost=product.price,
                    quantity=selected_product.get('quantity'),
                    product=product,
                )
            ])
            total = total + (product.price * selected_product.get('quantity'))
        invoice = Invoice.objects.create(
            status='pending',
            period_start_date=datetime.date.today(),
            period_end_date=datetime.date.today() + datetime.timedelta(days=7),
            invoice_date=datetime.datetime.now(),
        )

        invoiceorder = InvoiceOrder.objects.create(
            invoice=invoice,
            order=order,
        )

        order.total = total
        order.save()
        return {
            'products': products,
            'name': order.id,
            'address': invoice.invoice_no,
            'phone': validated_data.get('phone'),
            'email': validated_data.get('email'),
        }
コード例 #22
0
class AccountSerializer(CustomerSerializer):
    id = serializers.IntegerField(source='pk')
    username = serializers.CharField(source='get_username')
    phone_number = PhoneNumberField()
    shipping_addresses = serializers.SerializerMethodField()
    billing_addresses = serializers.SerializerMethodField()

    class Meta:
        model = Customer
        fields = [
            'id', 'username', 'salutation', 'first_name', 'last_name', 'email',
            'phone_number', 'extra', 'shipping_addresses', 'billing_addresses'
        ]

    def get_shipping_addresses(self, obj):
        addresses = obj.shippingaddress_set.all()
        if addresses:
            return ShippingAddressSerializer(addresses,
                                             context=self.context,
                                             many=True).data

    def get_billing_addresses(self, obj):
        addresses = obj.billingaddress_set.all()
        if addresses:
            return BillingAddressSerializer(addresses,
                                            context=self.context,
                                            many=True).data
コード例 #23
0
class StaffRegisterSerializer(AbstractRegistrationSerializer):
    email = serializers.EmailField(required=STAFF_EMAIL_IS_REQUIRED,
                                   allow_blank=not STAFF_EMAIL_IS_REQUIRED)
    phone_number = PhoneNumberField(max_length=20,
                                    required=STAFF_PHONE_IS_REQUIRED,
                                    allow_blank=not STAFF_PHONE_IS_REQUIRED)

    def get_cleaned_data(self):
        cleaned_data = super().get_cleaned_data()
        # case where phone is not required we need to auto generate phone number unique and save
        cleaned_data.update({
            'email':
            self.validated_data.get('email', generate_dummy_email()),
            'phone_number':
            self.validated_data.get('phone_number',
                                    generate_dummy_phone_number())
        })
        return cleaned_data

    def save(self, request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request, user, self)
        self.custom_signup(request, user)
        setup_user_email(request, user, [])
        return user
コード例 #24
0
ファイル: serializers.py プロジェクト: liewegas/turnout
class LookupSerializer(ActionSerializer):
    phone = PhoneNumberField(required=False)
    zipcode = serializers.CharField(validators=[zip_validator])
    state = serializers.ChoiceField(choices=STATES,
                                    required=True,
                                    validators=[state_code_validator])

    class Meta:
        model = Lookup
        minimum_necessary_fields = [
            "first_name",
            "last_name",
            "address1",
            "city",
            "state",
            "zipcode",
            "date_of_birth",
            "email",
        ]
        optional_fields = [
            "address2",
            "age",
            "phone",
            "sms_opt_in",
            "response",
            "utm_campaign",
            "utm_source",
            "utm_medium",
            "source",
        ]
コード例 #25
0
class SMSVerificationSerializer(serializers.Serializer):
    phone_number = PhoneNumberField(required=True)
    session_token = serializers.CharField(required=True)
    security_code = serializers.CharField(required=True)

    def validate(self, attrs):
        attrs = super().validate(attrs)
        phone_number = attrs.get("phone_number", None)
        security_code, session_token = (
            attrs.get("security_code", None),
            attrs.get("session_token", None),
        )
        backend = get_sms_backend(phone_number=phone_number)
        verification, token_validatation = backend.validate_security_code(
            security_code=security_code,
            phone_number=phone_number,
            session_token=session_token,
        )

        if verification is None:
            raise serializers.ValidationError(_("Security code is not valid"))
        elif token_validatation == backend.SESSION_TOKEN_INVALID:
            raise serializers.ValidationError(_("Session Token mis-match"))
        elif token_validatation == backend.SECURITY_CODE_EXPIRED:
            raise serializers.ValidationError(_("Security code has expired"))
        elif token_validatation == backend.SECURITY_CODE_VERIFIED:
            raise serializers.ValidationError(
                _("Security code is already verified"))

        return attrs
コード例 #26
0
class BloggerActionSerializer(ModelActionSerializer):
    country = CountryField(source='profile.country', required=False)
    blogs_num = serializers.IntegerField(source='profile.blogs_num',
                                         required=False)
    birth_date = serializers.DateField(source='profile.birth_date',
                                       required=False)
    phone_number = PhoneNumberField(source='profile.phone_number',
                                    required=False)
    bio = serializers.CharField(source='profile.bio', required=False)

    class Meta:
        model = User
        fields = (
            'id',
            'username',
            'blogs_num',
            'birth_date',
            'phone_number',
            'country',
            'bio',
        )
        action_fields = {
            "list": {
                "fields": (
                    'id',
                    'username',
                    'blogs_num',
                )
            },
            # "retrieve": {"fields": ('id', 'username', 'blogs_num',)},
        }
コード例 #27
0
class ChangePhoneNumberSerializer(ErrorDictMixin, AllowedMobilePrefixMixin,
                                  serializers.Serializer):
    phone_number = PhoneNumberField()

    @property
    def user(self):
        return self.context['request'].user

    def validate_phone_number(self, phone_number):
        if self.user.phone_number == phone_number:
            raise serializers.ValidationError(
                _('The new phone number must be different than the old one.'))
        org = self.context['view'].organization
        mobile_prefixes = org.radius_settings.allowed_mobile_prefixes_list
        if not self.is_prefix_allowed(phone_number, mobile_prefixes):
            raise serializers.ValidationError(
                _('This international mobile prefix is not allowed.'))
        return phone_number

    def validate(self, data):
        self.user.phone_number = data['phone_number']
        try:
            self.user.full_clean()
        except ValidationError as e:
            raise serializers.ValidationError(self._get_error_dict(e))
        return data

    def save(self):
        self.user.is_active = False
        self.user.save()
コード例 #28
0
class AddressSerializer(serializers.Serializer):
    contact_name = serializers.CharField(max_length=255)
    contact_phone = PhoneNumberField()
    city = serializers.CharField(max_length=255)
    street = serializers.CharField(max_length=255)
    house = serializers.CharField(max_length=255)
    zip = serializers.CharField(max_length=255)
コード例 #29
0
class PatientSearchSerializer(serializers.ModelSerializer):
    gender = ChoiceField(choices=GENDER_CHOICES)
    phone_number = PhoneNumberField()

    class Meta:
        model = PatientSearch
        fields = "__all__"
コード例 #30
0
def to_phone_number_field(phone_number):
    try:
        return PhoneNumberField().to_internal_value(phone_number)
    except ValidationError:
        parsed = phonenumbers.parse(phone_number, region="IN")
        return phonenumbers.format_number(parsed,
                                          phonenumbers.PhoneNumberFormat.E164)