jc.jang

5강 회원가입 본문

Django/Django - 인증편

5강 회원가입

jangstory 2019. 8. 29. 00:36

주제

  • 회원가입

노트

  • django.contrib.auth.forms에 UserCreationForm을 이용해 회원가입을 구현한다.
  • urls.py에 회원가입 url을 등록한다.
  • UserCreationForm을 임포트하여 입력 받은 데이터로 회원 가입을한다.
  • accounts/templates/accounts/signup.html을 구현한다.

 

  • 위의 과정이 가장 기본적인 방법이다.
  • 만약 회원가입 시 email을 추가로 입력받고 싶다면
  • UserCreationForm을 forms.py에서 상속 받아 재정의해서 사용하면 편하다.

 

  • accounts/urls.py
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    ...
    path('signup/', views.signup, name='signup'),
    ...
]

 

  • accounts/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class SingupForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'password1', 'password2', 'email')
  • UserCreationForm을 상속받아 email 필드를 추가한다.

 

  • accounts/views.py
from django.shortcuts import render, redirect
from django.conf import settings
from .forms import SingupForm

def signup(request):
    if request.method == "POST":
        form = SingupForm(request.POST)
        if form.is_valid():
            user = form.save()
            return redirect(settings.LOGIN_URL)
    else:
        form = SingupForm()
    return render(request, 'accounts/signup.html', {
        'form': form,
    })
  • request.method가 GET인 경우 form을 render한다.
  • request.method가 POST인 경우 form.is_valid()를 통해 데이터를 확인하고 모델(회원)을 저장한다.
  • 회원 가입 후 settings.LOGIN_URL로 redirect한다.

 

  • accounts/templates/accounts/signup.html
{% extends "accounts/layout.html" %}

{% block content %}
    <form action="" method="post">
        {% csrf_token %}
        <table>
            {{ form.as_table }}
        </table>
        <input type="submit">
    </form>
{% endblock %}

질문

  • User Model에 필드를 추가하려면 어떻게 해야할까?
  • 이메일로 로그인하려면 어떻게 해야할까?

요약

  • 회원가입 시 email 필드를 받는 것을 찾아 보다가 Form 클래스와 ModelForm 클래스에 대해 자세히 알게 되었다.
  • Form은 save method를 직접 구현해줘야 한다는 점에서 번거롭다.
  • 하지만 Model과 연동된 ModelForm을 사용하면 간단하게 구현 가능하다.

날짜

  • 오후 5시, 20190828

 

Comments