ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何将本地化添加到 Django REST 框架

2022-08-29 17:02:06  阅读:206  来源: 互联网

标签:文件 翻译 本地化 py 应用程序 Django API REST


如何将本地化添加到 Django REST 框架

Django

在本文中,我将为您提供有关如何使用 I18N 和 Django Rest Framework 本地化 Django Rest API 的指南。

在开始本教程之前,我将简要介绍 Django 和 Django REST Framework。

首先要做的事情 Django 到底是什么?

Django 是一个免费的开源 Python Web 框架,它遵循 MVT(模型视图模板)模式,您可以使用该框架构建快速、安全和可扩展的 Web 应用程序。这是一个包含电池的框架,您可以在那里大大减少开发时间。

什么是 Django Rest 框架?

Django Rest 框架是 Django Web 框架的其余实现,使用它,您可以使用 Django 使用少量代码创建 REST API。

那是介绍。现在让我们开始吧。

设置虚拟环境

您要做的第一件事是初始化一个新的 Django 项目。为此,您应该已经在设备上安装了 Python。通常,当我开发 Django 应用程序时,我会在虚拟环境中进行。当您使用虚拟环境时,您可以在该虚拟环境中安装 pip 包。否则,这些软件包将全局安装在您的 PC 中。

要设置虚拟环境,请使用 Pipenv .

您可以使用以下命令安装它。在运行这些命令之前,请确保您已经安装了 Python。

 pip install — 用户 pipenv

之后转到一个新目录,您需要在其中初始化应用程序并在其中创建一个名为 .venv 的新文件夹。当您创建此文件夹时,虚拟环境会自动检测此文件夹并在此文件夹中安装所有包。

安装 Django

现在我们可以在我们的虚拟环境中安装 Django。对于那次运行

 pipenv 安装 Django

创建一个新的 Django 项目

现在我们必须创建一个新的 Django 项目。我们可以通过运行以下命令来做到这一点。

 django-admin startproject 本地化

使用此命令,它将创建一个新的 Django 项目,该项目在名为本地化的文件夹中具有名称本地化。由于有两个名为本地化的文件夹,我将把名为本地化的内部文件夹带到根目录。这样我们可以有一个更好的文件夹结构。现在您的文件夹结构如下所示。

 .venv  
 本土化  
 - __init__.py  
 - asgi.py  
 - 设置.py  
 - urls.py  
 -wsgi.py  
 管理.py  
 点文件

之后,您可以通过运行打开 Django 项目

 py manage.py 运行服务器

创建新应用

好的,现在我们已经完成了项目的初始化。现在我将创建另一个应用程序来演示本地化。等待?但是 Django 应用程序中的应用程序是什么?

应用程序是做某事的网络应用程序——例如博客系统、公共记录数据库或小型投票应用程序

要了解更多信息,请访问 Django Docs https://docs.djangoproject.com/en/4.0/intro/tutorial01/

要创建这样的应用程序,您需要键入以下命令。我假设我们正在创建一个博客应用程序。

 python manage.py 启动博客

运行此命令后,您可以看到我们的新 Django 应用程序已在我们的目录中创建

安装 Django REST 框架

现在我们需要安装 Django Rest Framework 来构建我们的 API Endpoint。您可以通过 python 包索引中的以下命令安装 Django Rest Framework。

 pipenv 安装 djangorestframework pipenv 安装降价 pipenv 安装 django-filter

我们应该安装 markdown 和 Django 过滤器以及 Django Rest Framework 以正确使用 Django REST API。

现在我们已经成功安装了它。现在我们需要让它在我们的应用程序中工作。为此,您必须进行一些配置。

首先,转到本地化文件夹中的设置文件,然后向下滚动到已安装的应用程序部分。之后将 rest_framework 放在列表中,如下图所示。

创建第一个 API 端点

现在我要在我们的项目中创建我的第一个 API 端点。要创建它,请转到博客应用程序内的视图文件,删除所有内容并粘贴以下代码。

 从 rest_framework.decorators 导入 api_view  
 从 rest_framework.response 导入响应[ @api_view](https://twitter.com/api_view) ()  
 def hello_world(请求):  
 message = "这是我的第一个 Django API"  
 返回响应({“消息”:消息})

这是一个基于函数的 API 视图,它返回消息“这是我的第一个 Django API”作为响应。

注册端点

之后,我们需要在 urls.py 文件中注册这个视图。这样 Django App 将能够访问此功能。为此,请转到博客应用程序中的 urls.py 并将以下代码粘贴到那里。这会将我们的 hello world 函数导入 urls.py 文件并在应用程序中注册它。

 从 .views 导入 hello_world  
 from django.urls 导入路径 网址模式 = [  
 路径('消息',你好世界),  
 ]

现在我们已经在博客应用程序中注册了它,但是我们需要在项目中注册博客应用程序的 URL。为此,您需要转到本地化文件夹中的 urls.py,并且必须在其中添加以下代码。

 从 django.contrib 导入管理员  
 从 django.urls 导入路径,包括 网址模式 = [  
 路径('admin/',admin.site.urls),  
 路径('api/blog/',包括('blog.urls')),  
 ]

而已。现在当你访问这个 URL http://localhost:8000/api/blog/message 您应该在可浏览的 API 中看到我们的消息。

设置翻译

您要做的第一件事是将以下代码添加到设置文件的末尾,并确保在文件顶部导入 os。 gettext 函数将定义我们的翻译字符串,并且为了约定,我们为其添加一个 _ 别名。设置文件位于本地化文件夹内。

**从** **django.utils.translation** **进口** 获取文本 **作为** _  
 进口我们

在底部之后,我们应该添加语言列表以使翻译工作。您可以通过以下代码段来执行此操作。

 # 可用语言  
 语言 = [  
 ('sv', _('瑞典语')),  
 ] # 语言环境可用路径  
 LOCALE_PATHS = [  
 os.path.join(BASE_DIR, 'locale/')  
 ]

LANGUAGES 列表将定义该项目中的其他语言是什么,而 LOCALE_PATHS 定义 Django 可以从哪里找到翻译字符串。之后在项目的根目录创建一个文件夹代码语言环境。现在文件夹结构应该如下所示。

 .venv  
 博客  
 语言环境  
 本土化  
 - __init__.py  
 - asgi.py  
 - 设置.py  
 - urls.py  
 -wsgi.py  
 管理.py  
 点文件

标记翻译字符串

之后转到我们之前创建的 views.py 并从 Django.utils 导入 gettext 函数,如下所示

 从 django.utils.translation 导入 gettext 作为 _

该文件中的完整代码应类似于以下代码段。

 从 rest_framework.decorators 导入 api_view  
 从 rest_framework.response 导入响应  
 从 django.utils.translation 导入 gettext 作为 _[ @api_view](https://twitter.com/api_view) ()  
 def hello_world(请求):  
 message = "这是我的第一个 Django API"  
 返回响应({“消息”:消息})

之后,您可以将句子作为参数传递给 gettext 函数。在我们添加它之后,当我们运行以下命令时,Django 将扫描项目并检测使用 gettext 函数包装的单词。通过这种方式,它可以识别我们需要翻译的单词,并为这些单词创建一个翻译文件。对于一种语言,我们创建的语言环境文件夹中将有一个翻译文件。

这是我们用 gettext 函数包装消息变量后的代码片段。

 从 rest_framework.decorators 导入 api_view  
 从 rest_framework.response 导入响应  
 从 django.utils.translation 导入 gettext 作为 _[ @api_view](https://twitter.com/api_view) ()  
 def hello_world(请求):  
 message = _("这是我的第一个 Django API")  
 返回响应({“消息”:消息})

由于我们使用名为 _ 的别名,我们可以使用该别名包装消息,而不是输入整个 gettext 单词。

生成翻译文件

之后生成翻译文件非常容易。下面是命令

 django-admin makemessages -l sv

我们应该指定制作翻译文件所需的语言环境。就我而言,它是瑞典语,因为我已将其作为 sv 添加到设置文件中,因此我在此处将其添加为 sv。此时,如果您遇到错误,很可能是因为您没有安装 GNU gettext 工具。因此,请按照以下链接进行安装。这很简单。

[

gettext - GNU 工程 - 自由软件基金会

通常,程序是用英语编写和记录的,并在执行时使用英语与用户交互......

www.gnu.org

](https://www.gnu.org/software/gettext/)

如果上述命令成功,则应创建翻译文件。如果您仔细浏览翻译文件,您会看到我们标记为翻译的字符串已添加到翻译文件中。检查下面的图片。

生成的翻译文件

翻译文件中的内容

现在我们可以添加如下所示的等效瑞典语翻译字符串。

编译翻译字符串

之后,我们需要编译这个翻译文件才能使它工作。为此,您需要运行以下命令。

 py manage.py 编译消息

之后,将创建另一个文件,其中存在翻译字符串的编译版本。

编译的翻译文件

添加其他语言

现在,您可以按照上述步骤将另一种语言添加到您的应用程序中。就我而言,我添加了西班牙语。首先,我将它添加到设置文件的语言列表中,然后,我添加 LANUAGE_CODE=”es” 这样 Django 会识别我们想要使用的默认语言。所以这里的默认语言是西班牙语。

Adding spanish language to Django Rest Framework

然后运行 ​​make messages 命令。

 django-admin makemessages -learn

这次因为我们使用 es 它将创建一个西班牙语翻译文件。之后添加一个等效的西班牙语字符串。

Spanish translation file

然后像以前一样编译翻译文件。

 py manage.py 编译消息

那是最后一步。我们已经成功地在我们的 rest 框架中设置了翻译。

测试应用程序

现在我将使用 Postman 测试这个端点。 Postman 是一个 API 测试工具,我们可以用它来测试我们的 API。

首先,通过运行像往常一样启动 Django 项目

 py manage.py 运行服务器

现在去邮递员那里创建一个像这样的获取请求。你不需要使用邮递员。只需以您自己的方式进行测试。现在,由于我们的默认语言设置为西班牙语,它将以西班牙语发送响应。

Django Rest framework localization testing

但是现在如果您需要将语言更改为瑞典语,您需要在标题中将 Accept-Language 作为 sv 传递。检查下面的示例。但是我们必须在 Django 中间件设置中添加一个中间件,以便让 Django REST 框架识别我们的语言头。为此,请转到 setting.py 并找到中间件列表并将以下中间件添加到其中,如下所示。

 'django.middleware.locale.LocaleMiddleware'

现在就是这样,当您通过将 Accept-Lanuage 标头添加为 sv 发送请求时,它将以瑞典语发送响应。检查下图。

After add localization middleware to the Django REST Framework

这就是本文的内容。如果您需要我遵循的代码作为参考,您可以通过访问以下存储库来获取它。

https://github.com/PasinduPrabhashitha/Django-Rest-Framework-Localization

谢谢阅读。希望你对这个过程有所了解。如果您有任何问题,请在下面发表评论。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/1518/52162916

标签:文件,翻译,本地化,py,应用程序,Django,API,REST
来源: https://www.cnblogs.com/amboke/p/16636496.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有