def post(self, request): try: User.objects.get(email__iexact=request.data['email']) return Response({'detail': 'User with this email already exists'}, status=status.HTTP_226_IM_USED) except: serializer = UserSerializer(data=request.data, context={'request': request}) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def my_jwt_response_handler(token, user=None, request=None): return { 'token': token, 'user': UserSerializer(user, context={ 'request': request }).data }
class ResourceSerializer(TagSerializer, serializers.ModelSerializer): tags = TagsSerializerField(model_field='tags', default='') media_type = MediaTypeSerializerField(choices=Resource.RESOURCE_TYPES, allow_blank=True) user = UserSerializer(read_only=True) class Meta: model = Resource lookup_field = 'guid' fields = ( 'guid', 'author', 'title', 'description', 'url', 'referring_url', 'other_referring_source', 'user', 'date_published', 'created', 'modified', 'media_type', 'paid', 'tags' )
class FeedbackSerializer(serializers.ModelSerializer): rating_id = RatingSerializer() review_id = ReviewSerializer() user_id = UserSerializer(many=False, read_only=True) class Meta: model = Feedback fields = ['developer_id', 'rating_id', 'review_id', 'user_id']
class ReviewRatingSerializer(serializers.ModelSerializer): user_id = UserSerializer(many=False, read_only=True) rating_id = RatingSerializer review_id = ReviewSerializer class Meta: model = Review fields = ['user_id', 'rating']
def RkmenderRegistration(request, format = None): """ List all users, or create a new user. """ #Takes all users and serialize them if GET if request.method == 'GET': users = User.objects.all() serializer = UserSerializer(users, many=True) return Response(serializer.data) #Creates a new user and sets its password to unusable since login with Facebook elif request.method == 'POST': serializer = UserSerializer(data=request.DATA) if serializer.is_valid(): serializer.object.set_unusable_password() serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def RkmenderDetail(request, username, format=None): """ Retrieve, update a user instance. """ #Do check if the user exist if not return False try: user = User.objects.get(username=username) except User.DoesNotExist: response = {"success": False} return Response(response, status=status.HTTP_200_OK) if request.method == 'GET': serializer = UserSerializer(user) return Response(serializer.data) elif request.method == 'PUT': serializer = UserSerializer(user, data=request.DATA) if serializer.is_valid(): serializer.save() return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class ResourceSerializer(TagSerializer, serializers.ModelSerializer): tags = TagsSerializerField(model_field='tags', default='') media_type = serializers.SerializerMethodField() user = UserSerializer(read_only=True) class Meta: model = Resource lookup_field = 'guid' fields = ('guid', 'author', 'title', 'description', 'url', 'referring_url', 'other_referring_source', 'user', 'date_published', 'created', 'modified', 'media_type', 'paid', 'tags') def get_media_type(self, obj): return obj.get_media_type_display()
class FullInfoDeveloperSerializer(serializers.ModelSerializer): user = UserSerializer(many=False, read_only=True) # birth_date = serializers.DateField(format="%d.%m.%Y") # city = serializers.CharField(read_only=False,write_only=False) stacks_id = StacksSerializer(many=False, read_only=True) skills_id = SkillsSerializer(many=True, read_only=True) rating = serializers.SerializerMethodField("get_rating_avg") rating_count = serializers.SerializerMethodField("get_rating_count") price = serializers.SerializerMethodField('get_price') review = serializers.SerializerMethodField('get_review') review_count = serializers.SerializerMethodField('get_review_count') # rating = RatingSerializer(many=True, read_only=True) # review = ReviewSerializer(source='review_set', many=True, read_only=True) dev_service = DeveloperServiceSerializer(many=False, read_only=True) is_favoritex = serializers.BooleanField(read_only=True) class Meta: model = Developer fields = [ 'id', "user", "education", "dev_service", "stacks_id", "skills_id", "rating", "rating_count", "price", "review", "review_count", "work_experience", "about", "is_favoritex" ] def restore_object(self, attrs, instance=None): # is_favorite = attrs.pop('is_favoritex') instance = super(FullInfoDeveloperSerializer, self).restore_object(attrs, instance=instance) return instance def get_review_count(self, obj): review = Review.objects.filter(developer=obj).count() return review def get_review(self, obj): try: data = [] reviews = Review.objects.filter(developer=obj) ratings = Rating.objects.filter(developer=obj) for review in reviews: rate = None rating = Rating.objects.filter(developer=obj, user_id=review.user_id) try: rate = (rating.communication + rating.quality + rating.truth_review) / 3 except: rate = None res = { "user_id": { "name": obj.user.name, "surname": obj.user.surname }, "text": review.text, "rating": rate } data.append(res) return data except: return None def get_rating_count(self, obj): rating = Rating.objects.filter(developer=obj) sum_rate = 0 count_rate = 0 for rate in rating: all_rate = (rate.communication + rate.quality + rate.truth_review) / 3 sum_rate += all_rate count_rate += 1 if count_rate == 0: count_rate = 0 return count_rate def get_rating_avg(self, obj): rating = Rating.objects.filter(developer=obj) sum_rate = 0 count_rate = 0 for rate in rating: all_rate = (rate.communication + rate.quality + rate.truth_review) / 3 sum_rate += all_rate count_rate += 1 if count_rate > 0: avg_rating = sum_rate / count_rate else: avg_rating = None return avg_rating def get_price(self, obj): service = DeveloperService.objects.get(developer=obj) return service.price
class DevelopersSerializer(serializers.ModelSerializer): user = UserSerializer(many=False, read_only=True) stacks_id = StacksSerializer(many=False, read_only=True) skills_id = SkillsSerializer(many=True, read_only=True) rating = serializers.SerializerMethodField("get_rating_avg") rating_count = serializers.SerializerMethodField("get_rating_count") price = serializers.SerializerMethodField('get_price') is_favorite = serializers.SerializerMethodField('get_favorite') class Meta: model = Developer fields = [ 'id', "user", "stacks_id", "skills_id", "rating", "rating_count", "price", "is_favorite" ] def get_favorite(self, obj): try: # user = self.context['request'].user request = self.context.get("request") if request and hasattr(request, "user"): user = request.user fav = Favorites.objects.get(developer=obj, user=user) return True except: return False def get_rating_count(self, obj): rating = Rating.objects.filter(developer=obj) sum_rate = 0 count_rate = 0 for rate in rating: all_rate = (rate.communication + rate.quality + rate.truth_review) / 3 sum_rate += all_rate count_rate += 1 if count_rate == 0: count_rate = 0 return count_rate def get_rating_avg(self, obj): rating = Rating.objects.filter(developer=obj) sum_rate = 0 count_rate = 0 for rate in rating: all_rate = (rate.communication + rate.quality + rate.truth_review) / 3 sum_rate += all_rate count_rate += 1 if count_rate > 0: avg_rating = sum_rate / count_rate else: avg_rating = None return avg_rating # @staticmethod def get_price(self, obj): try: service = DeveloperService.objects.get(developer=obj) return service.price except: return None