on
[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