0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Django REST Frameworkのバージョン管理を誤った結果、AttributeErrorでドハマりした。

Last updated at Posted at 2022-05-22

環境情報

  • Python...3.8.13
  • Django...3.2
  • Django REST Framework.. 3.2.0(※注目)
  • 認証方式... Cookie認証

実行失敗したコマンド

# マイレーションファイルを生成
python manage.py makemigrations shop

出力エラーの一部

File "/Users/ユーザー名/python-projects/drf_vue_cookie_auth/config/urls.py", line 23, in <module>
    path('api-auth/', include('rest_framework.urls')),

File "/Users/ユーザー名/opt/anaconda3/envs/djangoenv/lib/python3.8/site-packages/rest_framework/urls.py", line 23, in <module>
    url(r'^login/$', views.login, template_name, name='login'),


AttributeError: module 'django.contrib.auth.views' has no attribute 'login'

マイグレーションファイル関連のエラーというより別の箇所のAttributeErrorが原因のエラーのよう。
特に最終行のエラー文が気になったので、下のようにPyCharmで遡って該当のdjango.contrib.auth.viewsを見てみたが、確かに'login'なんてフィールドもメソッドも無かったので変だと思った。
スクリーンショット 2022-05-22 20.49.51.png

その'login'を読もうとしているのが、site-packages/rest_framework/配下のurls.pyだが
url(r'^login/$', views.login, template_name, name='login'),
エラー文にも書いてあるこの部分がおかしいような気がしてきた。
「でもライブラリのコードじゃん。一体なぜ? というか、こんなの自分で直せないしどうしようか。」

という事で自分でよく考えた結果、以下の対応を試してみた。

行った対応(解決策)

pip install -U djangorestframework

上記コマンドでdjangorestframeworkのパッケージ更新を行ってみたところ、rest_framework/urls.pyが更新され以下のようになった。
スクリーンショット 2022-05-22 20.53.37.png

   
- url(r'^login/$', views.login, template_name, name='login'),
+ path('login/', views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'),

エラー文のurl(r'^login/$', views.login, template_name, name='login')なんて記述は無くなり、これが正しいの姿のようだ。
対処を考える中でなんとなく予想したが、古いライブラリのコードを取得していた模様。
その原因がどうしても気になり、historyでコマンド履歴を見てみたら過去にこんなコマンドを発見。

pip install djangorestframework=3.2

おそらくDjangoのLTSのバージョン(3.2)と混同して、Django REST Frameworkを同じようにしたら古いバージョンになってしまったと... ちなみにDRFの最新は3.13.X系。 DRFで3.2となると2015年のものになるようです(笑)
(参考: https://www.django-rest-framework.org/community/release-notes/)

DRFのバージョンちゃんと元に戻したところで実行失敗したマイグレーションコマンドを再度打ったら無事に成功しました。
些細なミスだけど、Django初学者を脱するための一歩になるといいな。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?