Files
chunyu_project/api/views/BaiduFanyiView.md
T
2026-08-05 23:59:15 +08:00

9.0 KiB

BaiduFanyiView Documentation

📄 File Location

api/views/BaiduFanyiView.py

Overview

Provides comprehensive translation and language recognition services using Baidu Translate API. All views have been converted to asynchronous operations for optimal performance with Daphne ASGI server.

Class Details

@permission_classes([AllowAny])
class BaiduFanyiView(APIView):
    async def post(self, request):  # Text translation

@permission_classes([AllowAny])
class RecognizeLangTypeViews(APIView):
    async def post(self, request):  # Language recognition

@permission_classes([AllowAny])
class PictureRecognizeViews(APIView):
    parser_classes = [MultiPartParser, FormParser]
    async def post(self, request):  # Picture translation

@permission_classes([AllowAny])
class SpeechRecognitionView(APIView):
    parser_classes = [MultiPartParser, FormParser]
    async def post(self, request):  # Speech recognition

Permissions

  • Access Level: Public (no authentication required)
  • Authentication: None (@permission_classes([AllowAny]))

Method Details


1. BaiduFanyiView (Text Translation)

Endpoint: POST /api/translate/

Description

Translates text content between supported languages using Baidu Translate API.

Parameters
{
    "q": "text to translate",           // Required: Text content (max 3000 characters)
    "from_lang": "en",                  // Required: Source language code
    "to_lang": "zh"                     // Required: Target language code
}
Supported Languages

Languages are loaded from info.baidu_lang_info:

  • Check languages for supported language pairs
  • Use "auto" for automatic source language detection
Response Format
{
    "message": "Success",
    "code": "10000",
    "data": {
        "trans_result": [
            {
                "src": "Hello world",
                "dst": "你好世界"
            }
        ],
        "from": "en",
        "to": "zh"
    }
}
Error Responses
Code Status Description
400 Bad Request Invalid language codes or missing parameters
400 Bad Request Text length exceeds 3000 characters
503 Service Unavailable Baidu API temporarily unavailable

2. RecognizeLangTypeViews (Language Recognition)

Endpoint: POST /api/recognize-language/

Description

Automatically detects the language of provided text content.

Parameters
{
    "q": "text to recognize"            // Required: Text content (max 3000 characters)
}
Response Format
{
    "message": "Success",
    "code": "10000",
    "data": {
        "lang": "en",
        "confidence": 0.98
    }
}
Error Responses
Code Status Description
400 Bad Request Text length exceeds 3000 characters
400 Bad Request Language not in supported range
503 Service Unavailable Baidu API temporarily unavailable

3. PictureRecognizeViews (Picture Translation)

Endpoint: POST /api/picture-translate/

Description

Translates text within images using Baidu's OCR and translation capabilities.

Request Format

Multipart form data with file upload and query parameters.

Parameters

Form Data:

  • file: Image file (required)

Query Parameters:

  • from_lang: Source language code (required)
  • to_lang: Target language code (required)
  • picture: Image format type (required, e.g., "jpg", "png")
Request Example
curl -X POST http://your-api.com/api/picture-translate/
  -H "Content-Type: multipart/form-data"
  -F "file=@image.jpg"
  -G --data-urlencode "from_lang=en"
  --data-urlencode "to_lang=zh"
  --data-urlencode "picture=jpg"
Response Format
{
    "message": "Success",
    "code": "10000",
    "data": {
        "words_result_num": 2,
        "words_result": [
            {
                "words": "Hello World"
            },
            {
                "words": "Welcome"
            }
        ]
    }
}
Error Responses
Code Status Description
400 Bad Request Invalid language codes
400 Bad Request Unsupported image format
503 Service Unavailable Baidu API temporarily unavailable

4. SpeechRecognitionView (Speech Recognition)

Endpoint: POST /api/speech-recognition/

Description

Recognizes and translates speech/audio content.

Request Format

Multipart form data with voice file upload and query parameters.

Parameters

Form Data:

  • voice: Audio file (required)

Query Parameters:

  • speech_type: Audio format (required, e.g., "pcm")
  • from_lang: Source language code (required)
  • to_lang: Target language code (required)
Request Example
curl -X POST http://your-api.com/api/speech-recognition/
  -H "Content-Type: multipart/form-data"
  -F "voice=@audio.wav"
  -G --data-urlencode "speech_type=pcm"
  --data-urlencode "from_lang=en"
  --data-urlencode "to_lang=zh"
Response Format
{
    "message": "Success",
    "code": "10000",
    "data": {
        "result": "你好世界",
        "corpus_no": "123456789",
        "status": 0
    }
}
Error Responses
Code Status Description
400 Bad Request Unsupported speech type
400 Bad Request Invalid language codes
503 Service Unavailable Baidu API temporarily unavailable

Implementation Details

Async Operations

All views use aiohttp for non-blocking HTTP requests:

async with aiohttp.ClientSession() as session:
    async with session.post(url, params=payload, headers=headers) as response:
        result = await response.json()

Fallback Mechanism

If aiohttp is not available, views fall back to synchronous requests:

if aiohttp:
    # Use async aiohttp
else:
    # Fallback to sync requests

Configuration

Baidu API configuration loaded from:

  • info.baidu_fanyi_appid.py: appid, appkey, endpoint
  • info.baidu_lang_info.py: languages, auto_lang, cuid, mac

Security & Performance

Rate Limiting

  • Respects Baidu API rate limits
  • No additional rate limiting implemented
  • Consider implementing client-side rate limiting

Input Validation

  • Text length limit: 3000 characters
  • Language code validation
  • File format validation for media endpoints

Error Handling

  • Comprehensive try-catch blocks
  • Meaningful error messages
  • Graceful degradation when service unavailable

Usage Examples

Python Client

import aiohttp
import asyncio

async def translate_text():
    async with aiohttp.ClientSession() as session:
        payload = {'q': 'Hello', 'from_lang': 'en', 'to_lang': 'zh'}
        async with session.post('http://api/translate/', json=payload) as resp:
            return await resp.json()

# Run async operation
result = asyncio.run(translate_text())

JavaScript Frontend

// Text translation
const translate = async (text, fromLang, toLang) => {
    const response = await fetch('/api/translate/', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({q: text, from_lang: fromLang, to_lang: toLang})
    });
    return await response.json();
};

Testing Endpoints

# Test text translation
curl -X POST http://localhost:8000/api/translate/
  -H "Content-Type: application/json"
  -d '{"q":"Hello world","from_lang":"en","to_lang":"zh"}'

# Test language recognition
curl -X POST http://localhost:8000/api/recognize-language/
  -H "Content-Type: application/json"
  -d '{"q":"Hello world"}'

Monitoring & Debugging

Logging

  • Request data logged via print(request.data)
  • API responses logged via print(sign) in speech recognition
  • Consider adding structured logging for production

Performance Metrics

  • Async operations reduce blocking time
  • Concurrent requests handled efficiently
  • Memory usage optimized with streaming where possible

Health Checks

  • Service availability can be checked via API status
  • Consider implementing health check endpoints

Integration Notes

Django Integration

# urls.py
from django.urls import path
from api.views import BaiduFanyiView, RecognizeLangTypeViews, PictureRecognizeViews, SpeechRecognitionView

urlpatterns = [
    path('translate/', BaiduFanyiView.as_view(), name='translate'),
    path('recognize-language/', RecognizeLangTypeViews.as_view(), name='recognize-language'),
    path('picture-translate/', PictureRecognizeViews.as_view(), name='picture-translate'),
    path('speech-recognition/', SpeechRecognitionView.as_view(), name='speech-recognition'),
]

Running with Daphne

pip install aiohttp
daphne chunyu_project.asgi:application --port 8000

Last Updated: Current Session Version: 1.0