我需要制作一个 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)
添加回答
举报
0/150
提交
取消