LoginSignup
0
0

More than 3 years have passed since last update.

Djangoでユーザー登録機能を作る

Last updated at Posted at 2019-08-17

はじめに

前回の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 %}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0