はじめに
- Djangoは、認証機能と権限機能の両方を共に提供されています。標準でマイグレーションするとデフォルトで作成されるUserテーブルを利用して 認証機能を実装することができます。 docs.djangoproject.com
ユーザー管理
下記の機能を実装することが可能です。 - ユーザー登録 - ログイン - ログアウト(次回) - 認証(次回) - ログイン判定(次回)
ユーザー登録画面
ログイン画面
コード
アプリケーションのsetting.py
from django.urls import path from .views import signup, login urlpatterns = [ path('signup/', signup, name='signup'), path('login/', login, name='login'), ]
アプリケーションのview.py
from django.shortcuts import render, redirect from django.contrib.auth.models import User from django.contrib.auth import authenticate from django.contrib.auth import login as auth_login ## ログイン処理の画面 def login(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: auth_login(request, user) return redirect('list') else: return redirect('login') return render(request, 'login.html') ## ユーザー登録 def signup(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] try: User.objects.create_user(username, '', password) return render(request, 'signup.html' except: return render(request, 'signup.html', {'error': 'このユーザーは登録されています'}) return render(request, 'signup.html')
テンプレートファイル
- ユーザー作成画面
{% extends 'base.html' %} {% block content %} <div class="container"> <form class="form-signin" method="POST" action=''>{% csrf_token %} <img class="mb-4" src="/docs/4.5/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal">ユーザー登録</h1> {% if error %} {{ error }} {% endif %} <label for="inputUserName" class="sr-only">UserName</label> <input type="text" id="inputUserName" class="form-control" name='username' placeholder="User Name" required autofocus> <label for="inputPassword" class="sr-only">Password</label> <input type="password" id="inputPassword" class="form-control" name='password' placeholder="Password" required> <div class="checkbox mb-3"> </div> <button class="btn btn-lg btn-primary btn-block" type="submit">ユーザー登録</button> <p class="mt-5 mb-3 text-muted">© 2017-2020</p> </form> </div> {% endblock content%}
- ログイン画面
{% extends 'base.html' %} {% block content %} <div class="container"> <form class="form-signin" method="POST" action=''>{% csrf_token %} <img class="mb-4" src="/docs/4.5/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal">ログイン</h1> {% if error %} {{ error }} {% endif %} <label for="inputUserName" class="sr-only">UserName</label> <input type="text" id="inputUserName" class="form-control" name='username' placeholder="ユーザー名を入力して下さい" required autofocus> <label for="inputPassword" class="sr-only">Password</label> <input type="password" id="inputPassword" class="form-control" name='password' placeholder="パスワードを入力して下さい" required> <div class="checkbox mb-3"> </div> <button class="btn btn-lg btn-primary btn-block" type="submit">ログイン</button> <p class="mt-5 mb-3 text-muted">© 2020</p> </form> </div> {% endblock content%}