はじめに
- 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%}