【Django】Userモデルに使えるフィールド名・ユーザー登録・ログインの仕方


はじめに

この記事はDjango初級者脱却を目指す筆者が同じく初心者の方に向けた勉強メモです。言葉選びや解釈に間違いの可能性があります。

触れること

  • Userモデルとは
  • userの作り方
  • ログイン/ログアウトの実装

Userモデルとは

DjangoではUser管理用のデータベースがデフォルトで入っており、手間なく認証やユーザ管理を行うことが可能となっています。

Userモデルは以下のような継承関係にあり、以下に示すフィールド名を持ちます。

※ちなみにこの図はこちらの本を参考にさせていただきました。
https://www.amazon.co.jp/dp/B07GK7BWB7/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

また、他のmodelオブジェクト同様にしてデータにアクセスできます。

from django.contrib.auth.models import User

#ちなみにgetメソッドは値が取得できないとエラーを返す
User.objects.get(username='admin') 
User.objects.get(pk=1)

#ちなみにallメソッドはクエリセットオブジェクトを返す
#リストのような使い方ができる
User.objects.all() 

Userの作り方

  • コンソールで作る
(virtualenv)~~~~~$python manage.py createsuperuser

Adminサイトにアクセスできるすべての権限を持つスーパーユーザを作ります。

  • adminサイトで作る

    runserverしてからAdminサイトへいき、Addをクリック

  • views.py内で作る

from django.contrib.auth.models import User

User.objects.create_user(username,email,password)
#ユーザ登録したこの直後にログインしたページへ飛ばしたいときは
#user = User.objects.create_user(username,email,password)
#とすると便利

ログイン/ログアウト

from django.contrib.auth import authenticate, login, logout

def loginfunc(request):
      #Userモデルに一致すればオブジェクトを、なければnoneを返すので以下のように
      #if文を使う
      #Userを登録した直後なら
      #user = User.objects.create_user(username,email,password)で代用可
      user = authenticate(request, username=username, password=password)
        if user is not None:
            #ログイン
            login(request, user)
            return redirect('userpage')
        else:
            return redirect('signup')

def logoutfunc(request):
    #ログアウト
    logout(request)
    return redirect('signup')