DRF Serializer能否脱离Django Model单独使用以对接React处理ML请求
DRF Serializer 可脱离Django Model独立使用
问题1:无持久化需求是否可以完全不使用Model实现?
完全可以。
DRF的Serializer是完全独立的校验、序列化组件,只有ModelSerializer需要绑定Django Model做字段映射,你直接继承基础Serializer类自定义字段即可,全程不需要涉及数据库操作,完全适配你当前的ML推理场景:
示例代码
- 自定义入参序列化器(无Model绑定)
from rest_framework import serializers # 仅用于校验前端传入的ML推理参数,和数据库无任何关联 class MLRequestSerializer(serializers.Serializer): # 按你实际需要的入参字段定义即可,支持所有DRF内置校验规则 feature1 = serializers.FloatField() feature2 = serializers.IntegerField(min_value=0, max_value=100) feature3 = serializers.CharField(max_length=32, required=False)
- 编写POST接口完成推理逻辑
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status class MLInferenceView(APIView): def post(self, request): # 校验入参 serializer = MLRequestSerializer(data=request.data) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # 拿校验后的参数传入ML模型运算 ml_output = your_ml_model.predict(serializer.validated_data) # 直接返回结果,无任何数据库写入操作 return Response({"prediction": ml_output})
问题2:能否临时存储结果通过GET接口返回?
可以实现,不需要写Model做持久化,根据你的部署场景选对应方案即可:
- 单实例部署、临时存储时间短:可以直接存在服务进程的内存结构(比如字典)里,给每个请求生成唯一标识返回给前端,前端后续携带标识调用GET接口时直接从内存中取对应的结果即可,用完可以主动删除或者设置过期时间自动清理
- 多实例部署、需要更长的临时存储时间:可以用Django内置的缓存框架,配置Redis、Memcached等缓存后端,把运算结果序列化后存在缓存中,设置自动过期时间,全程不需要操作业务数据库,也不需要定义相关Model
注意:内存存储的临时数据会在服务重启后丢失,且多实例部署时无法跨实例访问,生产环境建议优先用缓存中间件存储临时结果
内容的提问来源于stack exchange,提问作者Hoo Louis
相关产品推荐
相关产品推荐

