为了账号安全,请及时绑定邮箱和手机立即绑定

Rest API 模式从数据库检索值并返回

Rest API 模式从数据库检索值并返回

婷婷同学_ 2023-10-11 16:18:54
我需要制作一个 Rest API,它将接受 3 个输入:(input_list字符串句子列表)、from_lang(字符串)、to_lang(字符串),并在从数据库表中获取值后返回字符串列表。例子:input - {input_list: ['how are you', 'see you later', 'where are you'], from_lang: 'english', to_lang: 'spanish' }output - {['cómo estás', 'nos vemos más tarde', 'Dónde estás']}服务将使用任何受支持语言的句子列表调用此 API,作为回报,如果数据库中存在翻译句子,则将获得相同长度的列表,如果不存在,则返回 null 值。我应该如何进行?我所做的是,我创建了一个序列化器来处理/验证传入请求serializers.py:def supported_lang(value):    if value not in SUPPORTED_LANGUAGES:        print(value)        print(SUPPORTED_LANGUAGES)        raise serializers.ValidationError('Language not supported')class TranslateSerializer(serializers.Serializer):   input_list = serializers.ListField(       child=serializers.CharField(allow_blank=False),       allow_empty=False   )   from_language = serializers.CharField(validators=[supported_lang])   to_language = serializers.CharField(validators=[supported_lang])我定义了一个简单的模型来存储翻译model.py:class TranslationModel(models.Model):    english = models.CharField(blank=False, max_length=MAX_LENGTH, unique=True)    spanish = models.CharField(blank=True, max_length=MAX_LENGTH)    italian = models.CharField(blank=True, max_length=MAX_LENGTH)    is_active = models.BooleanField(default=True)然后在我的中views.py我处理了如下的帖子请求class TranslateView(views.APIView):    def post(self, request):        serializer = TranslateSerializer(data=request.data)        serializer.is_valid(raise_exception=True)        serialized_data = serializer.validated_data        result = self.get_translations(serialized_data)  # here i am confused        return Response(result)到目前为止一切顺利,现在我很困惑如何从模型中获取数据以及如何返回数据(遵循最佳实践)。get_translations()我在中定义了一个函数views.py:
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

使用 Serializers.Serializer 处理/验证传入请求是一个好习惯吗

当然如此。这本质上是序列化器的核心概念之一(解析、验证和序列化)

我是否也应该对模型使用序列化器,如果是的话如何

没有必要这样做。仅当从用户发送或接收数据时才需要序列化器,但此处的情况并非如此。

如何动态传递过滤器值

使用字典解包

k = {request['from_language']: sentence}
queryset = TranslationModel.objects.filter(**k)


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信