-
Python with Django_ 장고 게시판노트 앱 만들기 (1) :: 절실성실 (tistory.com)
Python with Django_ 장고 게시판노트 앱 만들기 (2) :: 절실성실 (tistory.com)
Python with Django_ 장고 게시판노트 앱 만들기 (3) 부트스트랩 적용 :: MS (tistory.com)
Python with Django_ 장고 게시판노트 앱 만들기 (4) 게시글 등록 :: MS (tistory.com)
Python with Django_ 장고 게시판노트 앱 만들기 (5) 로그인 로그아웃 :: MS (tistory.com)
에서 이어지는 글 입니다.
회원가입
회원가입 기능 추가
Django.contrib.auth 앱을 이용하여 구현한다.
common/forms.py
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", "email")
UserCreationForm 은 기본적으로 username, password1, password2를 가지고 있고, email속성을 추가하기 위해 UserCreationForm을 상속받는 UserForm을 생성한다.
common/views.py
from django.contrib.auth import authenticate, login from django.shortcuts import render, redirect from .forms import UserForm def signup(request): if request.method == "POST": form = UserForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get('username') raw_password = form.cleaned_data.get('password1') user = authenticate(username=username, password=raw_password) login(request, user) return redirect('index') else: form = UserForm() return render(request, 'common/signup.html', {'form': form})
회원가입 완료된 후 자동 로그인이 가능하도록 authenticate와 login 함수를 사용한다.
templates/common/signup.html
... <form method="post" class="post-form"> {% csrf_token %} {% include "form_errors.html" %} <div class="form-group"> <label for="username">사용자 이름</label> <input type="text" class="form-control" name="username" id="username" value="{{ form.username.value|default_if_none:'' }}"> </div> ... <button type="submit" class="btn btn-primary">생성하기</button> ...
하나하나를 form-group으로 묶어서 <div>로 묶어준다.
회원가입 링크 추가
templates/common/login.html
… <div class="row"> <div class="col-4"> <h4>로그인</h4> </div> <div class="col-8 text-right"> <span>또는 <a href="{% url 'common:signup' %}">계정을 만드세요.</a></span> </div> </div> …
common/urls.py
… urlpatterns = [ path('login/', auth_views.LoginView.as_view(template_name='common/login.html'), name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), path('signup/', views.signup, name='signup'), ]
검은색 박스 처리는 그냥 그림판으로 보기 좋으라고 해놨습니다.
admin 페이지로 접속하면 확인도 가능하다.
'개발 > Python' 카테고리의 다른 글
Python with Django_ 장고 Paginator 클래스 (0) 2021.11.16 Python with Django_ 장고 게시판노트 앱 만들기 (7) 네비게이션 바 (0) 2021.11.16 Python with Django_ 장고 게시판노트 앱 만들기 (5) 로그인 로그아웃 (0) 2021.11.15 Python with Django_ 장고 게시판노트 앱 만들기 (4) 게시글 등록 (0) 2021.11.15 Python with Django_ 장고 게시판노트 앱 만들기 (3) 부트스트랩 적용 (0) 2021.11.15 댓글 (비로그인 댓글 허용하지 않습니다.)