djangoをdockerコンテナで利用(19) – ログアウト画面で真っ白

定期更新してたらdjango5があることに気づいた。

django-logout

来年に5.2のLTS出るんやな。
予定として6.0のことも書いてある。
2026年のことまで書いてあるのは気ぃ早いなぁ。

4.2.7を使ってたのを、勇気を出して5.0.2に変えてみた。

バージョン上げてみる

pip3で普通にやってみる。
おお、他にも色々上がっとるやん。

django-logout

テストしてだいたいOKやったけど

2015年頃からデータベースに帳簿とか画像とかpdfが入ってて、読み書きはできた。

帳簿も2020年のを見比べると金額あってたから、データベース関連の処理とか集計の処理は大丈夫っぽい。

見た目一緒やから別ページのリンク画像やけど、円グラフも表示できてた。

django-invoice

LTSやないから期待してへんかったけど、django5でも行けるんとちゃうか。

と思ってたら、最後のログアウトしたところで画面真っ白。
なんかヤな予感。

前にdjango3をdjango4にあげたときにどっかのページ表示でこんなんあったような、なかったような・・・。

だいたい真っ白のときにはサーバからまともなhtmlが戻ってきてへんのな。

調べてみた

検索してみると、logoutviewでgetが非推奨になったらしい。5.0になったらなくなってまうってよ。

Django
The web framework for perfectionists with deadlines.

脆弱性対応とかなんやろけど、どないしたらええんやろか。
ログアウトできんと困るやん。

対処方法探す

同じ様なことをやってる人がいた。
getの代わりにpostメソッド使えばええみたいやけど、getメソッド許可するの?

侍テラコヤ(SAMURAI TERAKOYA) - 日本最安級のサブスク型オンラインITスクール
侍テラコヤは、【無料】で始められる日本最安級のサブスク型オンラインITスクールです。つまづいた時にエンジニアに相談できるQA掲示板、勉強を習慣化できる学習ログ、サービス開発しながら学べる学習教材など、エンジニアになるための機能が盛り沢山!

そういえば自分のログアウト処理の箇所はこう書いてた。

<a href="https://nafslinux.intra.gavann-it.com:30443/gvisWebApp/logout/" >イントラwebDjangoログアウト</a>

ほなこう書いてpostメソッド指定してみよ。

<form action="{% url 'gvisWebApp:logout' %}" method="post">
    {% csrf_token %}
    <input class="darkmode-ignore" type="submit" value="ログアウト">
</form>

そやけど、これだけやったらアカンかった。
まだ真っ白画面になった。

やり方悪いんかなぁってもうちょっと探してみたら、stackoverflowにも同じ様なのがあった。

Problem with Django class-based LogoutView in Django 5.0
I used Django class-based login and logout views by "django.contrib.auth.urls", login feature works correctly, but when ...

ここの回答に、こう書いてる人がいた。

path( "logout/", auth_views.LogoutView.as_view( http_method_names=["post", "get", "options"] ),

んんん? メソッドにgetも指定するってこと?
さっきのサイトにも似た様なこと書いてたな。

テストしてうまいこといったら、いったんこの記述採用っちゅうことで。

djangoのurls.pyの中で自分用にはこう書いたら、ログアウトちゃんとできた。

path('logout/', auth_views.LogoutView.as_view(template_name='gvisWebApp/logout.html',http_method_names=["post", "get", "options"]),  name='logout'),

さっきのgetメソッド使う方法をそのまま残して、http_method_namesの指定だけしてみたら、ログアウトできたように見えて実際はできずセッションが残ってたから、postメソッド使うようにはせなアカンみたい。

テンプレートの中でpostメソッドを使う様にして、urls.pyもgetメソッドを許可するように更新せなアカンみたい。

なんでなんやろ。
非推奨やからpost使うだけでよさそうに思うんやけど、getメソッドを許可する理由がイマイチ理解できへん。

まだしばらくは様子見

いったん5.0.2にあげたけど、あと1ヶ月ぐらいはこのまま開発環境でもう少し試そか。

まだ気づけてへんことがあるような気がする・・・。

タイトルとURLをコピーしました