2025-03-14 django

接触到新的东西,python,django,postgres记录一下学习中遇见的一些新知识点。
1.django 多语言。
从AI搜到的结论,基本上是正确的。

在Django项目中实现多语言支持,主要是通过Django的国际化和本地化功能来完成。以下是一个简要的步骤指南:

1. **启用国际化**:首先,在项目的`settings.py`文件中,确保`USE_I18N`设置为`True`,这表示启用了国际化支持。此外,还需要添加`django.middleware.locale.LocaleMiddleware`到中间件列表中,位置应在`SessionMiddleware`之后。

2. **标记文本**:在你的Django应用中,需要将希望翻译的文本用`gettext`函数包裹起来。通常的做法是使用`_()`作为快捷方式。

3. **创建语言文件**:运行`django-admin makemessages -l <language_code>`命令来生成`.po`文件,其中`<language_code>`是你想要支持的语言代码(如`zh_Hans`代表简体中文)。这些文件位于每个应用的`locale/<language_code>/LC_MESSAGES/`目录下。

4. **翻译文本**:打开生成的`.po`文件,将里面的`msgstr`值填写为你希望显示的翻译文本。

5. **编译消息**:完成翻译后,运行`django-admin compilemessages`命令来编译`.po`文件为二进制格式的`.mo`文件,这样Django就可以读取它们了。

6. **设置语言偏好**:Django允许用户通过URL参数、cookie或浏览器设置自动选择语言。你可以在`settings.py`中配置默认语言和其他语言相关的设置。

7. **处理静态文件中的文本**:对于JavaScript文件中的文本,可以使用Django提供的`makemessages`工具的`-d djangojs`选项来提取需要翻译的字符串,并按照上述步骤进行翻译。

通过以上步骤,你可以让你的Django项目支持多语言,从而更好地服务于不同语言背景的用户。需要注意的是,良好的国际化实践还包括考虑日期、时间、数字格式等本地化问题。

AI之外,django-admin compilemessages 总是出错,因为在maxKB的工程中,用 python main.py compilemessages即可。
在源代码中获取的时候,就会获取对应的语言了。
至于用户请求则是在header里设置 accept-language:en-US 来实现。
请求来了之后会调用 def activate(language): 来激活对应的语言。

2.postgres的命令(也许mysql也有)
LPAD 左填充,对应的还有 RPAD

SELECT LPAD('abc', 5, '0') AS padded_string;
-- 结果: '00abc'

reverse 反转字符串

select reverse('abc') 返回 'cba'

SUBSTRING 提取字符串

select SUBSTRING('abc' FROM 1 FOR 1)  返回 'a'

::TEXT 强制类型转换符,转为 TEXT类型
jsonb_set 用于更新 JSONB 数据类型的字段中的特定部分。它允许你在不改变其他部分的情况下修改或添加 JSONB 数据中的键值对或数组元素

jsonb_set(target jsonb, path text[], new_value jsonb [, create_missing boolean])

jsonb_build_object 用于从一组键值对构建一个 JSONB 对象。它非常适用于需要动态生成 JSON 数据的场景,例如将查询结果转换为 JSON 格式或在插入和更新操作中创建复杂的 JSONB 结构

SELECT jsonb_build_object(
    'name', 'Alice',
    'age', 30,
    'department', 'HR'
) AS employee_info;

COALESCE 用于返回其第一个非空(非 NULL)的表达式值。它可以帮助你处理数据中的缺失值,确保查询结果中不会出现 NULL 值,而是返回一个合理的默认值

COALESCE(expression1, expression2, ..., expressionN)
SELECT employee_id, COALESCE(phone_number, 'N/A') AS phone_number
FROM employees;
如果 phone_number 列的值为 NULL,则返回 'N/A';否则返回实际的电话号码。
这样就可以把空值显示为特定符号

CONCAT 适用于需要将多个字符串片段组合成一个完整字符串的场景。此外,PostgreSQL 还提供了 CONCAT_WS 函数,可以更方便地使用指定的分隔符连接字符串。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容