[CSAPI] Django 회원가입 구현

[CSAPI] Django 회원가입 구현

Django 의 model

회원가입 기능 구현을 하기 전에, 잠시 복기

auth app의 기본 model

- mariadb 의 auth_user 테이블 확인

+----+-----------+----------------------------+--------------+----------+------------+-----------+---------------------+----------+-----------+----------------------------+ | id | password | last_login | is_superuser | username | first_name | last_name | email | is_staff | is_active | date_joined | +----+-----------+----------------------------+--------------+----------+------------+-----------+---------------------+----------+-----------+----------------------------+

usercreationform : 링크

modelform : 링크

signup 구현

회원가입도 django.contrib.auth 앱을 통해 구현한다.

templates/csapi/main.html 수정 - 로그인한 상태가 아닌 경우, 회원가입 링크가 보이도록 수정한다.

{% block content %} {% if user.is_authenticated %} {{ user.username }} (Logout) {% else %} Sign In Sign Up {% endif %} {% endblock %}

login/urls.py 수정 - signup url 로 요청이 오면 views.py 의 signup 을 호출하도록 수정한다

from django.urls import path from django.contrib.auth import views as auth_views from . import views app_name = 'login' urlpatterns = [ path('login/', auth_views.LoginView.as_view(template_name='login/login.html'), name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), path('signup/', views.signup, name='signup'), ]

login/views.py 수정 - signup 함수를 추가한다

from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse('login 페이지입니다') def signup(request): return HttpResponse('회원가입 동작 확인')

중간 테스트

Sign Up 링크 생성 확인 Sign Up 클릭 시, 이동 확인

login/forms.py 작성 - username, password1, password2 속성을 갖는 UserCreationForm 에 email 필드를 추가하기 위해 UserCreationForm 을 상속시켜 확장

from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User class UserForm(UserCreationForm): email = forms.EmailField(label="이메일") class Meta: model = User fields = ("username", "password1", "password2", "email") # add email field

login/views.py 의 signup 함수 수정 - login에 성공하면 main 페이지로 redirect

from django.shortcuts import render, redirect from django.http import HttpResponse from django.contrib.auth import authenticate, login from login.forms import UserForm def index(request): return HttpResponse('login 페이지입니다') def signup(request): if request.method == "POST": form = UserForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get('username') password1 = form.cleaned_data.get('password1') # user authentication user = authenticate(username=username, password=password1) # login login(request, user) return redirect('/') else: form = UserForm() return render(request, 'login/signup.html', {'form' : form})

templates/login/signup.html 작성

{% block content %} 회원가입 페이지 {% csrf_token %} {% if form.errors %} {% for field in form %} {% for error in field.errors %} {{ field.label }} {{ error }} {% endfor %} {% endfor %} {% for error in form.non_field_errors %} {{ error }} {% endfor %} {% endif %} 이름 : 비밀번호 : 비밀번호 확인 : 이메일 : 제출 {% endblock %}

signup 테스트

정보 입력 제출 후, 가입과 동시에 login 성공

database 서버의 DB 데이터 확인

from http://not-to-be-reset.tistory.com/520 by ccl(A) rewrite - 2021-10-05 16:01:09