Shin_Code Shin_Code
  • ホーム
  • HTML/CSS
  • React
  • Python
  • Django
  • 転職
  • ホーム
  • Django

【Django】自作WEBアプリでログイン機能を実装してみた。

2021年5月3日2021年5月10日

SHARE

  • ツイート
  • シェア
  • はてブ
  • LINE
  • Pocket

Shinです。

前回のサインインの続きから説明していきます。

今回はDjangoにおけるログイン実装方法についてです。

サインインのやり方とほぼ同じなので難しく考えなくてOKです。

参考文献:Djangoのログイン認証

views.pyにおけるログイン実装コードから

まずは実際にログインするためのコードをみていきましょう。

(views.py)

from django.contrib.auth import authenticate, login

def loginview(request):
     if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        # もし、ユーザーオブジェクトが存在するなら。
        if user is not None:
    # ログインする。    
            login(request, user)
            return redirect('public.html')
        # ユーザーがオブジェクトが存在しないなら。
        else:
            return render(request, 'login.html', {'error': 'そのユーザーは存在しません。'})  
  return render(request, 'login.html', {})

遷移先の「public.html」はtemplatesディレクトリの中に生成しています。これは各々好きな遷移先(htmlファイル)を作ってください。

サインインの記事では説明しなかった部分を中心に解説します。

user = authenticate(username=username, password=password)

authenticateメソッドを使用します。

引数にはusernameとpasswordを指定。上記2行で書いたusernameとpasswordが設定されています。

返されるものは、もしユーザーが存在するならばUserオブジェクトが。もし照合しなければNoneが返されます。

返されたオブジェクトはuser変数の中へ格納。その後のifの条件分岐で利用します。

詳しくはこちらのリファレンスをご覧ください。

if user is not None:

user変数の中身が「None」でなければ、つまりuser変数の中にUserオブジェクトが入っているなら。という意味になります。

Userオブジェクトの中身の情報はログインのフォームで打ち込んだusernameとpasswordが格納されています。

login(request, user)
return redirect(‘public.html’)

login()メソッド使ってログインしましょう。

受け取る引数はHTTPリクエストオブジェクトと、Userオブジェクトです。この受け取った情報をもとにログインをします。

ログインしたら遷移したいページにリダイレクトさせましょう。

コラム:authenticateの中身(認証バックエンド)を覗いてみよう

Django公式リファレンスに載せてあったauthenticateの中身を見てみましょう。

from django.conf import settings 
from django.contrib.auth.backends import BaseBackend 
from django.contrib.auth.hashers import check_password 
from django.contrib.auth.models import User

class SettingsBackEnd(BaseBackend):

      def authenticate(self, request, usename=None, password=None):
            login_vaild = (settings.ADMIN_LOGIN == username)
            pwd_vaild = check_password(password, settings.ADMIN_PASSWORD)
            if login_vaild and pwd_vaild:
               try:
                    user = User.object.get(username=username)
               except User.DoesNotExit:
                    user = User(username=username)
                user.is_staff = True
                user.is_superuser = True
                user.save()
                return user
              return None

       def get_user(self, user_id):
              try:
                   return User.object.get(pk=user_id)
              except User.DoesNotExist:
                   return None

何やら難しいコードが書かれていますね。

settings.pyで定義されたユーザー名とパスワードを認証し、ユーザーの認証が初めてであった場合にUserオブジェクトを作成するバックエンドの例だそうです。

認証バックエンド方式まで変更したい人はここまでのコードを読み込む必要がありますが、私のような個人が使う分には変更する必要はないかと。

BaseBackendも気になりますが、私はDjango初学者なので深追いはここまでにしておきます。

 

ちなみに、ログイン画面のレイアウトはサインインと全く同じです。Bootstrapのサンプルを利用させてもらってます。

今回は以上になります。お疲れさまでした!

SHARE
  • ツイート
  • シェア
  • はてブ
  • LINE
  • Pocket

Follow Me!

この記事が気に入ったらフォローしよう

フォローする

CATEGORY :

  • Django

TAGS :

  • authenticate
  • login
  • ログイン
  • 認証
  • DjangoでmakemigrationsしたらModuleNotFoundError: No module namedのエラー吐かれた

    DjangoでmakemigrationsしたらModuleNotFoundError: No module namedのエラー吐かれた

  • 【Django】CSSで背景画像が読み込まれないときの解決策がこちら。

    【Django】CSSで背景画像が読み込まれないときの解決策がこちら。

  • 【Django】自作WEBアプリでサインイン機能を実装してみた

    【Django】自作WEBアプリでサインイン機能を実装してみた

  • 【Django】特定のユーザーが投稿した内容だけを画面に表示するマイページを作ってみた。

    【Django】特定のユーザーが投稿した内容だけを画面に表示するマイページを作ってみた。

  • Windows10でDjango開発環境(仮想環境)を構築しようとして躓いたこと

    Windows10でDjango開発環境(仮想環境)を構築しようとして躓いたこと

  • 【Django】pdfの文字を抽出して翻訳するアプリを作ってみた。

    【Django】pdfの文字を抽出して翻訳するアプリを作ってみた。

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

前の記事

【Django】CSSで背景画像が読み込まれないときの解決策が…

次の記事

【Django】特定のユーザーが投稿した内容だけを画面に表示す…

Recent Posts

  • 【朗報】フリーランスSEへの第一歩!テックビズで叶える理想のエンジニアライフ
    【朗報】フリーランスSEへの第一歩!テックビズで叶える理想のエンジニアライフ
  • 【Udemy割引クーポン】視聴者様限定で92%オフのUdemyクーポンを配布します
    【Udemy割引クーポン】視聴者様限定で92%オフのUdemyクーポンを配布します
  • 【Udemy講師】失敗談!Windowsのライセンス認証の透かしが見えてると審査に通りません
  • 【Django】pdfの文字を抽出して翻訳するアプリを作ってみた。
  • ReactとFirebaseで掲示板作ってみた。ログインなしで誰でも書き込めます:その1
    ReactとFirebaseで掲示板作ってみた。ログインなしで誰でも書き込めます:その1

人気記事

  • webpackでcss-loaderが読み込まれないエラーの対処法
    DjangoでmakemigrationsしたらModuleNotFoundError: No module namedのエラー吐かれた
  • 【Django】特定のユーザーが投稿した内容だけを画面に表示するマイページを作ってみた。
  • 【Django】自作WEBアプリでログイン機能を実装してみた。

Djangoの記事一覧

アーカイブ

  • 2025年3月
  • 2021年12月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年9月
  • 2020年7月

カテゴリー

  • API
  • C
  • C#
  • Django
  • HTML・CSS
  • Java
  • JavaScript
  • Python
  • React
  • SIerの日常
  • Udemy
  • エラー
  • チュートリアル
  • デプロイ
  • 私的考え
  • 転職

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
HOME
  • お問い合わせ
プライバシーポリシー

© 2025 Shin_Code All rights reserved.