はじめに
前回のDjangoでログイン・ログアウト機能を作るに続いて、djangoでユーザー登録機能を作る方法を書きます。
ユーザー登録機能を実装する
以下の手順で行います。
- ユーザー登録ページのurlを設定する
- viewの設定をする
- ユーザー登録ページを作成する
ユーザー登録ページのurlを設定する
urls.pyのurlpatternsに以下のようなpathを追加する。
urlpatterns = [
・・・
path('signup/', views.signup, name='signup'),
]
viewの設定をする
views.pyに以下を追加する。
ユーザー登録後、認証、ログインするようにしている。
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import authenticate, login
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST) # 入力された値からUserインスタンスを作成
if form.is_valid():
new_user = form.save() # ユーザーインスタンスを保存
input_username = form.cleaned_data['username']
input_password = form.cleaned_data['password1']
# フォームの入力値で認証できればユーザーオブジェクト、できなければNoneを返す
new_user = authenticate(username=input_username, password=input_pa
# 認証成功時のみ、ユーザーをログインさせる
if new_user is not None:
login(request, new_user)
return redirect('app:users_detail', pk=new_user.pk)
else:
form = UserCreationForm()
return render(request, 'app/signup.html', {'form': form})
ユーザー登録のページを作成する
signup.htmlを作成します。ここでは、base.htmlを拡張しています。
{% extends 'app/base.html' %}
{% block content %}
<h2>ユーザー登録</h2>
<form method="post" action="{% url 'app:signup' %}">{% csrf_token %}
<label>ユーザー名</label>
{{ form.username }}
{{ form.username.errors }}
<br>
<label>パスワード</label>
{{ form.password1 }}
{{ form.password1.errors }}
<br>
<label>パスワード(確認)</label>
{{ form.password2 }}
{{ form.password2.errors }}
<br>
<input type="submit" value="登録する">
</form>
<p><a href="{% url 'app:login' %}">ログインはこちら</a></p>
{% endblock %}