여름의 서재
[Django] Auth 정복하기(1)_Signup (회원가입) 본문
728x90
📄 유저 시나리오
1. 회원가입 버튼을 누른다.
2. 회원가입 폼이 담긴 페이지가 나온다.
3. 회원가입 폼을 작성하여 제출 버튼을 누른다.
4. 회원가입이 정상적으로 완료되면 바로 로그인이 되고 메인페이지가 나온다.
🔨 기능 구현하기
1) urls
: accounts 앱에 signup이라는 이름의 주소 생성
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
2) views
- GET: 회원가입 폼이 담긴 페이지를 응답
- POST: 회원가입 정보를 받아서 "유효성 검사" 후 회원가입 진행
- 유효성 검사를 통과하지 못한 경우 에러 메세지를 담아서 출력
(단, 로그인이 된 상태에서 signup 함수를 실행하려한다면 바로 메인페이지로 이동)
from django.shortcuts import redirect, render
from django.contrib.auth import login as auth_login
from django.contrib.auth.forms import UserCreationForm
def signup(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
return redirect('articles:index')
else:
form = UserCreationForm()
context = {
'form': form,
}
return render(request, 'accounts/signup.html', context)
① request.user.is_authenticated
: 사용자가 인증되었는지 확인하는 함수.
User에 항상 True이며, AnonymousUser에 대해서만 항상 False.
② UserCreationForm
: 새로운 유저를 생성해주는 내장 폼
③ auth_login (원래 login)
: 유저 정보를 세션에 생성 및 저장하는 역할을 하는 Django 내장 함수
3) templates
: 회원가입 폼이 담긴 페이지
{% extends 'base.html' %}
{% block content %}
<h1>Signup</h1>
<form action="{% url 'accounts:signup' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
{% endblock content %}
* 만약 UsercreationFrom을 수정하고 싶다면!
4) forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
# User 모델을 불러오는 2가지 방법
from django.contrib.auth.models import User # Django 내장 User 모델
from django.conf import settings # => settings.AUTH_USER_MODEL
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
# fields = ('username', 'password1', 'password2', 'email')
fields = UserCreationForm.Meta.fields + ('email',)
'Skill > Django' 카테고리의 다른 글
[Django] Auth 정복하기(3)_Update & Delete (0) | 2021.09.26 |
---|---|
[Django] Auth 정복하기(2)_Login & Logout (0) | 2021.09.26 |
[Django] CRUD를 더 탄탄하게(4)_이미지 넣기 (Static & Media) (0) | 2021.09.26 |
[Django] CRUD를 더 탄탄하게(3)_알림 문구 넣기 (Messages) (0) | 2021.09.25 |
[Django] CRUD를 더 탄탄하게(2)_create, update 함수 업그레이드 (0) | 2021.09.24 |
Comments