はじめに
Djangoでユーザ認証付きwebアプリの開発中に起こったエラー。
ユーザ認証機能追加のためにdjango-allauthをインストールし、settings.pyのINSTALLED_APPSに以下のように追加
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'allauth', #この行を追加
'app', #アプリ名(今回は関係なし)
]
その後諸々の作業を進め、python manage.py runserverでローカルサーバーを起動したところ以下のエラーが。
allauth.account.middleware.AccountMiddleware
NameError: name 'allauth' is not defined
allauthが未定義とのこと。
INSTALLED_APPSには追加されているのになぜ?
動作環境
OS
・windows 10 pro
モジュール
・Django 4.1.1
・django-allauth 0.56.1
原因と解決方法
例のごとくGPT先生にエラー文を叩きつけてお聞きしたところ、今回のエラーはミドルウェアの設定不足が原因らしい。
ChatGPT:https://chat.openai.com/
正しく動作させるには、settings.pyのMIDDLEWAREに以下の記述を追加しなくてはならないとのこと。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware', #この行を追加
]
こんなの前まで書かなかった...となるのもそのはずで、ver0.56.0から記述が必要になったとか。改めてバージョン変更は注意して行わないとですね...
参考サイト:django-allauth公式ドキュメント
おわりに
モジュールはアプデ前に、公式ドキュメントをチェックすると自戒しておきます。
ソースコードをGitHub等に公開する際には、requirements.txtには~=等を使って明確なバージョン記載しておきましょう。