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'],
},
},
}