Django-Slack 的定制选项

django-slack是一个在Django中方便发送Slack通知的模块。
然而,由于其定制方法较难理解,我整理了一下。

公式文档
https://django-slack.readthedocs.io/

这篇文章非常详细地解释了基本的使用方法。
https://qiita.com/hfujima/items/d80b9dd059f7bcebf2a4

我想要使用自定义模板。(Wǒ .)

首先,我们需要在一个合适的地方创建自己的模板。

{% extends django_slack %}

{% load django_slack %}

{% block text %}
# ここに独自のメッセージとかを入れる
{{ text }}
{% endblock %}

只需在发送消息时指定即可。

import os
from django.conf import settings
from django_slack import slack_message

class Slack:
    @classmethod:
    def send(cls, message)
        slack_message(os.path.join(settings.BASE_DIR, 'path/templates/slack/message.slack'), {'text': message})

因为每次指定都很麻烦,所以我觉得把它类化会更方便。

我想更改发送信道。

在settings.py中可以设置的SLACK_CHANNEL只有一个,但是我认为您可能希望根据消息来区分通知的频道。
即便如此,我们也可以使用自定义的模板来实现。

{% extends django_slack %}

{% load django_slack %}

{% block text %}
{{ text }}
{% endblock %}

{% block channel %}
# 送信したいチャンネル名
{{ channel }}
{% endblock %}

在发送信件时,需要提供频道名称。

import os
from django.conf import settings
from django_slack import slack_message

class Slack:
    @classmethod:
    def send(cls, message)
        slack_message(os.path.join(settings.BASE_DIR, 'path/templates/slack/message.slack'), {'text': message, 'channel': '#othor_channel'})

你可以通过更改每个消息的 endpoin_url、icon_emoji、icon_url、token 块来实现相同效果,分别替换为 SLACK_ENDPOINT_URL、SLACK_ICON_EMOJI、SLACK_ICON_URL、SLACK_TOKEN。

将在日志输出时进行slack通知的设置调整为自定义模板。

在公式文档中也有关于基本日志输出时的Slack通知的说明,但是在settings.py文件中的LOGGING中添加django_slack.log.SlackExceptionHandler的handler,并进行配置。如果要使用自定义模板,则需要添加template并指定路径。

import os

LOGGING = {
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
    },
    'handlers': {
        'slack_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django_slack.log.SlackExceptionHandler',
            # 独自テンプレートを設定
            'template': os.path.join(BASE_DIR, 'path/templates/slack/message.slack')
        },
    },
    'loggers': {
        'django': {
            'level': 'ERROR',
            'handlers': ['slack_admins'],
        },
    },
}

仅在日志输出时出现错误时,在Slack通知中加上@channel。

把LOGGING日志级别设置为WARNING后,只有在WARNING和ERROR的情况下才会通过slack进行通知,但如果是ERROR级别,希望立即引起注意,可以通过加上@channel来实现。需要创建一个模板和自定义类来继承SlackExceptionHandler并进行设置。

{% extends django_slack %}

{% load django_slack %}

{% block text %}
# is_channel=Trueの場合は@channelをつける
{% if is_channel %}<!channel>{% endif %}
{{ text }}
{% endblock %}
import os
from django.conf import settings
from django_slack.log import SlackExceptionHandler as OriginalSlackExceptionHandler

class SlackExceptionHandler(OriginalSlackExceptionHandler):

    def __init__(self, **kwargs):
        super().__init__(template=os.path.join(settings.BASE_DIR, 'path/templates/slack/message.slack'))

    def send_message(self, *args, **kwargs):
        """
        Hook to update the message before sending.
        """
        # ERRORだった場合は@channelをつける
        is_channel = False
        subject = args[1].get('text')
        if subject.find('ERROR') == 0:
            is_channel = True
        args[1]['is_channel'] = is_channel

        return super().slack_message(*args, **kwargs)
import os

LOGGING = {
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
    },
    'handlers': {
        'slack_admins': {
            'level': 'WARNING',
            'filters': ['require_debug_false'],
            'class': 'path.slack_exception_handler.SlackExceptionHandler',
        },
    },
    'loggers': {
        'django': {
            'level': 'WARNING',
            'handlers': ['slack_admins'],
        },
    },
}
广告
将在 10 秒后关闭
bannerAds