python - 如何从函数创建服务?
问题描述
我想使用 Django Rest API 创建一个服务。我有一个功能。这个函数的结果应该返回 2 个值,我应该以 JSON API 格式返回这些值。该功能将像这样工作。我将接收features_list
作为参数,我将使用它来创建结果并在def prediction
函数中以 json 格式将其显示为服务。
我创建了一个示例 API(我猜)它class PredictionSet
在我的视图中,但我实际上想def prediction
在我的视图中提供服务功能。
我无法理解如何应用它。我感到很困惑。任何帮助,将不胜感激。
模型.py
class Liquidity(models.Model):
pred_y = models.CharField(max_length=600)
score = models.FloatField()
视图.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
序列化程序.py
class LiquiditySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Liquidity
fields = '__all__'
解决方案
如果您想从ModelViewset
DRF 中返回自定义 JSON,您可以覆盖.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)
有关更多详细信息,请点击此链接
推荐阅读
- java - 使用 java 反射运行时,HDFS Parquet 文件阅读器抛出 DistributedFileSystem.class 未找到
- django - 芹菜任务工作者未在生产中更新
- php - 循环不适用于关联数组 Php
- ios - Swift:iOS 12.2 应用程序在启动时崩溃
- javascript - 如何使用新的 while 语句扩展 Javascript
- php - 如何修复 Symfony 4 中子对象的转换?
- java - 在 IDEA 终端中运行激活器命令时出现 java.lang.NoClassDefFoundError
- c# - 如何通过比较两个浮点值来识别带有 onSensorChanged 的事件
- vb.net - 在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题
- macos - 尝试在 OSX 10.11 上为 python2 安装 pygame