开发环境的颜色django壳
#python #django #linux

我经常执行操作任务,例如使用Django Shell修改数据或调试故障。实际上,我无法通过管理员或通过我使用shell的管理命令来做的任何事情。包装django-extensions为类固醇提供了一个外壳,我更喜欢内置的外壳。它使您可以运行自定义的替补,例如ipython或ptpython,并具有autocomplete, command history, automatic model class imports和无数其他开发工具。 Shell_plus适合Django程序员,手术刀对外科医生来说是什么。

大多数收到一定数量流量的Django站点都有多个开发环境。自然,总是有生产环境,通常是一个分期和(本地)开发环境。过去,我在以为我在登台环境上工作的同时,我对生产数据进行了脂肪和损坏。为了避免惨败,我已经建立了工具以减少未来他妈的的可能性。

使用外壳和一些python配置,我们可以获取我们所处环境的视觉指示。我想以某种红色的色调标记生产环境,以指示危险和蓝色分阶段,以表明粗心的黑客入侵很好。

本地发展
Local development

分期
Staging

生产
Production

安装shell_plus和ptpython

要使用可编程外壳,我们需要以下成分:

通过将其添加到您的installed_apps
启用django_extensions

INSTALLED_APPS = (
    ...
    "django_extensions",
    ...
)

默认情况下,如果安装了一个shell_plus,将检测并使用增强的补充。

定制ptpython

ptpython从配置文件中读取,我们可以在其中指定自定义键键和depl colorscheme。默认配置文件可以从prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py复制。

在配置方法的底部,我们将添加代码,该代码检测当前环境并根据环境更改REPL标题和颜色。我在我的几乎所有项目和基于环境的过滤问题中都使用Sentry。 SENTRY_ENVIRONMENT由部署工具注入,我们可以使用该变量为每个环境明显绘制外壳。我喜欢黑色的本地开发项目,蓝色进行分期,红色用于生产。此外,我们将使PTPYTHON工具栏使用粗体字体进行登台和生产。

"""
Configuration example for ``ptpython``.
Copy this file to $XDG_CONFIG_HOME/ptpython/config.py
On Linux, this is: ~/.config/ptpython/config.py
"""
import os

from prompt_toolkit.styles import Style

__all__ = ["configure"]


def configure(repl):
    # Default configuration above...

    # Read the environment variable from what we set for Sentry
    environment = os.environ.get("SENTRY_ENVIRONMENT", "local")

    if "prod" in environment:
        custom_colorscheme = {"status-toolbar": "bg:#C70039 #000000 bold"}
        title = "PRODUCTION"
    elif "staging" in environment:
        custom_colorscheme = {"status-toolbar": "bg:#005ca4 #000000 bold"}
        title = "STAGING"
    else:
        custom_colorscheme = {"status-toolbar": "#000000"}
        title = "DEV"

    repl.install_ui_colorscheme("custom", Style.from_dict(custom_colorscheme))
    repl.use_ui_colorscheme("custom")
    repl.title = title

剩下要做的就是启动shell

./manage.py shell_plus

如果您正在尝试不同的颜色,并且想反映实时的更改,则可以为命令设置变量并复制配置文件以反映更改。

cp ptpython_config.py ~/.config/ptpython/config.py && SENTRY_ENVIRONMENT=production ./manage.py shell_plus

为Docker配置Ptpython

FROM python:3.10.8

# Install your dependencies here

COPY ptpython_config.py /root/.config/ptpython/config.py

COPY . /app/

CMD ["gunicorn", "-b", "0.0.0.0:80", "config.wsgi"]