定期更新してたら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になったらなくなってまうってよ。

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

対処方法探す

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

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

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

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

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

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

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

https://stackoverflow.com/questions/77684480/problem-with-django-class-based-logoutview-in-django-5-0

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

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

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

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

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

1
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ヶ月ぐらいはこのまま開発環境でもう少し試そか。

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