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

我需要制作一个 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:


婷婷同学_
浏览 135回答 1
1回答

慕尼黑的夜晚无繁华

使用 Serializers.Serializer 处理/验证传入请求是一个好习惯吗当然如此。这本质上是序列化器的核心概念之一(解析、验证和序列化)我是否也应该对模型使用序列化器,如果是的话如何没有必要这样做。仅当从用户发送或接收数据时才需要序列化器,但此处的情况并非如此。如何动态传递过滤器值使用字典解包k = {request['from_language']: sentence} queryset = TranslationModel.objects.filter(**k)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python