我是 django-rest-framework 的新手,所以如果我的问题太简单或没有多大意义,我很抱歉。
我已经编写了一个科学的 python 包,并希望通过 API 提供它。为此,我使用 django Rest 框架。
从高层次的角度来看,为了使我的包中的一个特定功能可用,我必须调整两个文件。在序列化程序文件中,我定义了某些验证,将传入请求转换为 python 本机类型并定义输入参数的验证。在视图文件中,我调用验证并在调用包内部函数之前进行一些转换。
假设我想通过 API 公开的函数如下所示:
In [6]: def f(a):
...: return np.mean(a)
...:
现在 API 将通过 json 文件接收输入。我的第一个问题是如何为上述函数定义序列化器? ListField 是正确的选择吗?
class fSerializer(serializers.Serializer):
nparray = serializers.ListField(
source="a",
child=serializers.DecimalField(max_digits=12, decimal_places=2)
)
或者还有其他更适合的领域吗?
视图文件将如下所示:
class fViewSet(viewsets.ViewSet):
def create(self, request):
serializer = fSerializer(data=request.data)
if serializer.is_valid():
try:
a = np.asarray(serializer.validated_data.get("a"))
json_return = json.dumps(f(a))
return HttpResponse(json_return,
content_type='application/json')
正如您所看到的,我首先将经过验证的数据转换为 numpy 数组。但这是正确的(Pythonic)方法吗?应该在序列化器中完成吗?
如果有人有关于通过 API 公开此类函数的教程,我会非常乐意阅读。