Как создать службу из функции?

Я хочу создать сервис, используя Django Rest API. У меня есть функция. Результат этой функции должен вернуть 2 значения, и я должен вернуть эти значения в формате JSON API. Функция будет работать следующим образом. Я получу features_list в качестве параметра и буду использовать его для создания результата и отображения его в качестве сервиса в формате json в функции def prediction.

Я создал образец API (я предполагаю) он class PredictionSet в моих представлениях, но на самом деле я хочу сделать сервис def prediction функцией в моих представлениях.

Я не могу понять, как его применить. Я в полном замешательстве. Любая помощь будет оценена по достоинству.

models.py

class Liquidity(models.Model):
    pred_y = models.CharField(max_length=600)
    score = models.FloatField()

views.py

class PredictionSet(viewsets.ModelViewSet):
    queryset = Liquidity.objects.all()
    serializer_class = LiquiditySerializer


def prediction(request, features_list):
    filename = config.FINAL_MODEL_PATH
    classifier = pickle.load(open(filename, 'rb'))
    scale_file = config.SCALER_PATH
    scaler = pickle.load(open(scale_file, 'rb'))

    sample = np.array(features_list).reshape(1, -1)
    sample_scaled = scaler.transform(sample)

    pred_y = classifier.predict(sample_scaled)
    prob_y = classifier.predict_proba(sample_scaled)
    if prob_y[0][1] < 0.5:
        score = 0
    elif prob_y[0][1] <= 0.69:
        score = 1
    else:
        score = 2
    pred_y = pred_y[0]

    prediction_obj = Liquidity.objects.get_or_create(pred_y=pred_y, score=score)
    prediction_result = prediction_obj.pred_y
    prediction_score = prediction_obj.score

    context = {
        'prediction_result ': prediction_result,
        'prediction_score ': prediction_score,
    }

    return context

serializer.py

class LiquiditySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Liquidity
        fields = '__all__'

Если вы хотите вернуть пользовательский JSON из ModelViewset в DRF, вы можете переопределить .list() и/или .retrieve() следующим образом :

from rest_framework import status
from rest_framework.response import Response

class PredictionSet(viewsets.ModelViewSet):
    queryset = Liquidity.objects.all()
    serializer_class = LiquiditySerializer
    
    # Your custom function definition
    def prediction(self, request, features_list):
        # The content
    
    def retrieve(self, request, *args, **kwargs):
        result = prediction(...)  # Call your custom service and got result
        # Return the result as JSON (url = /api/v1/predictions/1) an object
        return Response({'data': result}, status=status.HTTP_200_OK)
    
    def list(self, request, *args, **kwargs):
        result = prediction(...)  # Call your custom service and got result
        # Return the result as JSON (url = /api/v1/predictions) a list of objects
        return Response({'data': result}, status=status.HTTP_200_OK)

Для получения более подробной информации перейдите по этой ссылке

Вернуться на верх