Created
March 30, 2020 12:20
-
-
Save asankulov/98cd8e5bdc571cb0c4100bb40946b401 to your computer and use it in GitHub Desktop.
django component class exampls
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Course(models.Model): | |
class Meta: | |
verbose_name = 'Course' | |
verbose_name_plural = 'Courses' | |
trailer = models.FileField(verbose_name='Trailer', upload_to='course_trailers/') | |
price = models.PositiveSmallIntegerField(verbose_name='Price') | |
author = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Author', | |
related_name='courses') | |
title = models.CharField(max_length=255, verbose_name='Title') | |
description = models.CharField(verbose_name='Description', max_length=2000) | |
@property | |
def produce_slug(self): | |
return '{}-{}'.format(self.title, self.pk) | |
@property | |
def author_info(self): | |
return self.author.__unicode__() | |
@property | |
def rate(self): | |
result = self.rates.aggregate(avg_rate=Avg('rate')) | |
return result['avg_rate'] | |
@property | |
def rates_count(self): | |
return self.rates.distinct('user').count() | |
@property | |
def rates_in_percent_by_value(self): | |
total_rows_count = CourseRate.objects.filter(course=self).count() | |
return CourseRate.objects.filter(course=self).values('rate').annotate( | |
value=ExpressionWrapper(Count('rate') * 100 / total_rows_count, | |
output_field=models.FloatField())).values('rate', 'value') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UserCreateSerializer(serializers.Serializer): | |
email = serializers.EmailField(required=True, trim_whitespace=True) | |
password = serializers.CharField(required=True, trim_whitespace=True, min_length=6) | |
name = serializers.CharField(required=True, trim_whitespace=True) | |
birth_date = serializers.DateField(required=False) | |
gender = serializers.ChoiceField(choices=CustomUser.GENDER_CHOICES, required=False) | |
phone_number = serializers.CharField(required=False) | |
avatar = serializers.ImageField(required=False) | |
def create(self, validated_data): | |
try: | |
firebase_user = firebase_auth.create_user(email=validated_data['email'], | |
password=validated_data['password'], | |
display_name=validated_data['name'], | |
email_verified=False) | |
user = CustomUser.objects.create_user(**validated_data, username=firebase_user.uid) | |
except (firebase_exceptions.InvalidArgumentError, IntegrityError): | |
raise rest_exceptions.ValidationError(detail='Email is already taken.') | |
except ValueError: | |
raise rest_exceptions.ValidationError(detail='The specified user properties are invalid.') | |
return user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class VerifyEmailAPIView(APIView): | |
def get_object(self, key): | |
return get_object_or_404(key=key, | |
queryset=EmailConfirmation.objects.all()) | |
@swagger_auto_schema(request_body=VerificationKeySerializer) | |
def post(self, request): | |
serializer = VerificationKeySerializer(data=request.data) | |
serializer.is_valid(raise_exception=True) | |
email_confirmation = self.get_object(serializer.validated_data['key']) | |
try: | |
email_confirmation.confirm() | |
except KeyExpiredException: | |
return Response({'detail': _('Key expired.')}, status=status.HTTP_400_BAD_REQUEST) | |
return Response({'detail': _('Email verified.')}, status=status.HTTP_200_OK) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment