Djangoで、SILENCED_SYSTEM_CHECKSを定義してSystem check frameworkのメッセージ出力を抑制する

これは JSL(日本システム技研) Advent Calendar 2020 - Qiita 12/15分の記事です。

 
DjangoにはSystem check frameworkがあり、Djangoプロジェクトの正しさをチェックしてくれます。
System check framework | Django ドキュメント | Django

そんな中、特定のチェックで大量に引っかかってしまうことがありました。

そこで、特定のチェックのメッセージ出力を抑える方法を探した時のメモを残します。

 
目次

 

環境

 

事例

例えば、Djangoを1系からバージョンアップする中で、urls.pyに

urlpatterns = [
    path('warn$', TemplateView.as_view(template_name='silence_app/index.html')),
]

と、 $ を残してしまったとします。

 
この場合、開発用のサーバを起動すると、

Performing system checks...

System check identified some issues:

WARNINGS:
?: (2_0.W001) Your URL pattern 'warn$' has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().

System check identified 1 issue (0 silenced).

というメッセージが表示されます。

実際には他のメッセージも表示されているため、このメッセージだけを抑制したいとします。

 

対応

settings.pyに SILENCED_SYSTEM_CHECKS を定義します。
https://docs.djangoproject.com/en/3.1/ref/settings/#silenced-system-checks

今回は 2_0.W001 を抑制したいので、settings.pyに

SILENCED_SYSTEM_CHECKS = ['2_0.W001']

と定義します。

 
その後、開発サーバを起動すると

Performing system checks...

System check identified no issues (1 silenced).

へと表示が変わり、2_0.W001を抑制できました。

 
なお、この警告ですが、実際にアクセスしてみると

warn宛

$ curl localhost:8000/silence/warn -v
...
< HTTP/1.1 404 Not Found

warn$宛

$ curl localhost:8000/silence/warn$ -v
...
< HTTP/1.1 200 OK

となります。

 

ソースコード

Githubに上げました。 silence_app ディレクトリが今回のDjangoアプリです。
https://github.com/thinkAmi-sandbox/django_31-sample