0
3

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 3 years have passed since last update.

【Django】Userのログイン時にUserの個別ページへリダイレクトする方法

Last updated at Posted at 2022-01-08

ログインフォームや新規登録フォームでユーザを作成してログイン認証した後、
固定のページではなく、ユーザ個人個人のページへリダイレクトする方法を紹介します

HttpResponseRedirect
reverse

を利用します

↓の参考URLに書かれていた方法ですが、自動翻訳の難解日本語なので
この記事にてわかりやすくできればと思います

目次

大まかな流れは以下の通りです

  1. ユーザ個別ページ作成
  2. settings.py変更
  3. url設定
  4. view関数作成

ついでにおまけで httpresponse と reverse の基礎を紹介しております

では具体的に作例を見ながらやっていきましょう

1. ユーザ個別ページ作成

ユーザの個別ページ用のtemplateを用意します

main/templates/main/home.html
{% extends 'main/base.html' %}
{% block content %}
{% load static %}

<h1>{{ user.username }}の個別ページ</h1>

{% endblock %}

2. settings.py変更

settings.py で指定しているLOGIN_REDIRECT_URLを以下の通り設定します

# LogInOut
LOGIN_REDIRECT_URL = 'main:login_redirect'

3. url設定

login , signup 等で、ログイン認証が完了したときに実行されるview関数のurlを追加

main:urls.py
app_name = 'main'
urlpatterns = [
    path('', views.index, name='index'),
    path('signup/', views.signup, name='signup'),
    path('login/', auth_views.LoginView.as_view(template_name='main/login.html'), name='login'),
    path('login_redirect/', views.login_redirect, name='login_redirect'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('login_redirect/', views.login_redirect, name='login_redirect'), # login_redirect 時に実行されるurl,view関数
    path('home/', views.home, name='home'), # user の 個人ページ
]

4. view関数作成

view関数を作成します
ここでdjangoに用意されているHttpResponseRedirect(),reverse()を利用します

  • 公式レファレンス

  • HttpResponseRedirectを使ってリダイレクトを実行するだけの関数を作成

  • reverseを使って、request user の 個人ページにリダイレクトするようにする

main/views.py
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse

# index
def index(request):
    return render(request, 'main/index.html')


# ログイン後、ユーザの個別ページへリダイレクト
def login_redirect(request):
    return HttpResponseRedirect(reverse('main:home'))


# ユーザメインページ
@login_required
def home(request):
    return render(request, 'main/home.html')

これで、ログイン実行したときにユーザ個人ページが表示されればOK

おまけ. reverse() と HttpResponseRedirect() の使い方

  • reverse()

reverse(view関数名, args=[]) で使う
reverse を使うと 引数に指定したview関数を実行するurlを出力できる
出力される文字列は→/path/to/view のような感じの文字列

>>> from django.urls import reverse
>>> from main.views import home

## user をセット
>>> user = User.objects.get(id=1)
>>> user
<User: user1>

## reverse 実行
>>> reverse('main:home', args=[user.username])
'/home/user1/'
>>> type(reverse('main:home', args=[user.username]))
<class 'str'>
  • HttpResponseRedirect()

HttpResponseRedirect('/path') で使う
引数に指定したパスへリダイレクトしてくれる

組み合わせ

上記2つを組み合わせることでreverseで検索したURLパスにリダイレクトしてくれる関数が作成できる

def rediret(request):
    return HttpResponseRedirect(reverse('main:home', args=[request.user.username]))

追伸

参考ページのwebdevqa.jp.netは一体なんなんだ、、
いつもかゆいところに手が届くQAが載ってる、、
自動翻訳日本語理解するのすごい疲れるが、、、

0
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?