我经常执行操作任务,例如使用Django Shell修改数据或调试故障。实际上,我无法通过管理员或通过我使用shell的管理命令来做的任何事情。包装django-extensions为类固醇提供了一个外壳,我更喜欢内置的外壳。它使您可以运行自定义的替补,例如ipython或ptpython,并具有autocomplete, command history, automatic model class imports和无数其他开发工具。 Shell_plus适合Django程序员,手术刀对外科医生来说是什么。
大多数收到一定数量流量的Django站点都有多个开发环境。自然,总是有生产环境,通常是一个分期和(本地)开发环境。过去,我在以为我在登台环境上工作的同时,我对生产数据进行了脂肪和损坏。为了避免惨败,我已经建立了工具以减少未来他妈的的可能性。
使用外壳和一些python配置,我们可以获取我们所处环境的视觉指示。我想以某种红色的色调标记生产环境,以指示危险和蓝色分阶段,以表明粗心的黑客入侵很好。
安装shell_plus和ptpython
要使用可编程外壳,我们需要以下成分:
-
django-extensions/django-extensions包含管理命令
shell_plus
和许多其他出色工具 - prompt-toolkit/ptpython是一个更好的python repl,它将为shell_plus体验提供动力。您可以使用其他重录,例如ipython或bpython,但我更喜欢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"]