Django项目API接口数据返回转繁体

1. 项目介绍

用尽可能少的代码更改和资源消耗,将接口返回的数据从简体转为繁体。

2. 项目依赖

基于 zhconv 将简体数据转为繁体数据。

依赖安装:

pip install zhconv

zhconv 提供基于 MediaWiki 词汇表的最大正向匹配简繁转换。Python 2, 3 通用。支持以下地区词转换:

zh-cn 大陆简体
zh-tw 台灣正體
zh-hk 香港繁體
zh-sg 马新简体(无词汇表,需要手工指定)
zh-hans 简体
zh-hant 繁體

3. 项目改造

3.1. 构建数据转换模块

from zhconv import convert as zh_convert


def data_translate(data, lan='zh-tw'):
    if isinstance(data, dict):
        new_data = dict()
        for k, v in data.items():
            new_data[k] = data_translate(v, lan=lan)
        data = new_data
    if isinstance(data, list):
        new_data = list()
        for r in data:
            new_data.append(data_translate(r, lan=lan))
        data = new_data
    if isinstance(data, tuple):
        new_data = list()
        for r in data:
            new_data.append(data_translate(r, lan=lan))
        data = tuple(new_data)
    if isinstance(data, str):
        data = zh_convert(data, lan)
    return data

此模块可以将简体数据转化为指定类型(默认为台湾繁体)的数据,项目中需要进行数据转换的位置可以调用此模块。

from where import data_translate

a = {'a': ['干啥', '人体']}

print(data_translate(a))

注意:将 where 替换成文件的路径,后文也是如此。

输出如下:

{'a': ['幹啥', '人體']}

3.2. 构建自动转化中间件

class LangResponseMiddleware(MiddlewareMixin):

    def process_response(self, request, response):
        headers = request.headers
        if headers:
            language = headers.get('Content-Language')
            if language:
                if language in {'zh-tw', 'zh-hk', 'zh-hant'}:
                    response.content = data_translate(response.content.decode(), language).encode()
        return response

通过获取 Headers 里面的 Content-Language 参数,自动返回不同语言版本的数据。

3.3. 更新配置

将 LangResponseMiddleware 加入到 MIDDLEWARE 配置中。

MIDDLEWARE = [
    'where.middleware.LangResponseMiddleware',
    'django.middleware.security.SecurityMiddleware',
    ...
]

4. 调试

import requests
import json

url = "http://127.0.0.1:8000/api/home_page/"

payload = json.dumps({
  "user_id": "1",
  "version": "3.01.02"
})
headers = {
  'Content-Language': 'zh-tw',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

在请求的 headers 里面添加 'Content-Language': 'zh-tw'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值