Chapter 8-3 Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현)

2025. 5. 12. 20:14·Django

Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현)

Django에서 Bootstrap 기반의 회원가입 페이지를 구현하기 위해 필요한 설정부터 폼 처리, 뷰 구성, 템플릿 작성까지의 전체 흐름을 정리합니다.


✅ 1. 정적 파일(static) 설정

  1. static 폴더를 프로젝트 루트(manage.py와 같은 위치)에 생성합니다.
  2. Bootstrap CSS/JS 파일을 다운로드하여 static/css, static/js 경로에 넣습니다.
  3. settings.py에 다음 설정을 추가합니다:
STATIC_URL = 'static/'
STATIC_DIR = BASE_DIR / 'static'
STATICFILES_DIRS = [STATIC_DIR]
STATIC_ROOT = BASE_DIR / '.static_root'

📎 Bootstrap 다운로드

 

4.root폴더에 static 만들고 Bootstrap CSS/JS 파일을 다운로드하여 static/css, static/js 경로에 넣습니다.


✅ 2. 회원가입 폼 커스텀 (forms.py)

from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm

User = get_user_model()

class SignupForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in ('password1', 'password2'):
            self.fields[field].widget.attrs['class'] = 'form-control'
            self.fields[field].widget.attrs['placeholder'] = 'password'
            self.fields[field].label = '비밀번호' if field == 'password1' else '비밀번호 확인'

    class Meta(UserCreationForm.Meta):
        model = User
        fields = ('email', 'nickname')
        labels = {'email': '이메일', 'nickname': '닉네임'}
        widgets = {
            'email': forms.EmailInput(attrs={'placeholder': 'example@example.com', 'class': 'form-control'}),
            'nickname': forms.TextInput(attrs={'placeholder': '닉네임', 'class': 'form-control'})
        }

✅ 3. 템플릿 디렉토리 설정

settings.py의 TEMPLATES 항목에서 DIRS 경로를 지정합니다:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [...],
        },
    },
]

✅ 4. 회원가입 뷰 구현 (views.py)

from django.shortcuts import render
from django.views.generic import FormView
from django.urls import reverse_lazy

from member.forms import SignupForm

class SignupView(FormView):
    template_name = 'auth/signup.html'
    form_class = SignupForm

    def form_valid(self, form):
        user = form.save()
        return render(self.request, 'auth/signup_done.html', {'user': user})

✅ 5. base 템플릿 구성

<!-- templates/base.html -->
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Pystagram</title>
  <link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
</head>
<body>
  <div class="container">
    {% block content %}{% endblock %}
  </div>
  <script src="{% static 'js/bootstrap.bundle.js' %}"></script>
</body>
</html>

✅ 6. 회원가입 페이지 템플릿 (signup.html)

<!-- templates/auth/signup.html -->
{% extends 'base.html' %}
{% block content %}
  <div>
    <h1 class="title">회원가입</h1>
    <form method="POST">
      {% csrf_token %}
      {% for field in form %}
        <div class="form-group row mb-2">
          <label class="form-label col-md-2" for="{{ field.auto_id }}">{{ field.label }}</label>
          <div class="col-md-10">
            {{ field }}
          </div>
          {% for error in field.errors %}
            <span class="text-danger">{{ error }}</span>
          {% endfor %}
        </div>
      {% endfor %}
      {% for error in form.non_field_errors %}
        <p class="text-danger">{{ error }}</p>
      {% endfor %}
      <button class="btn btn-primary">회원가입</button>
    </form>
  </div>
{% endblock %}

✅ 7. URL 설정

# config/urls.py
from django.contrib import admin
from django.urls import path
from member import views as member_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('signup/', member_views.SignupView.as_view(), name='signup'),
]

✅ 8. 회원가입 완료 템플릿 (signup_done.html)

<!-- templates/auth/signup_done.html -->
{% extends 'base.html' %}
{% block content %}
  <div class="col-8 offset-2">
    <h1>회원가입이 거의 완료되었습니다.</h1>
    <p>
      이메일 인증을 하여 회원가입을 완료해주세요.<br>
      ({{ user.email }})
    </p>
  </div>
{% endblock %}

🎯 마무리 체크리스트

  • static 디렉토리 설정 및 Bootstrap 파일 추가
  • 회원가입 폼 SignupForm 작성
  • 템플릿 디렉토리 설정
  • 뷰(View) 구현 (FormView + form_valid)
  • 회원가입 화면 템플릿 작성 (signup.html)
  • 회원가입 완료 템플릿 작성 (signup_done.html)
  • URL 설정 완료

이 구조를 기반으로 이메일 인증, 로그인 연동, 마이페이지 등으로 확장 가능합니다. 다음 포스트에서는 이메일 인증 로직을 추가해보겠습니다! 📩

'Django' 카테고리의 다른 글

Chapter 8-5 Django 이메일 인증을 위한 SMTP 설정 가이드  (0) 2025.05.12
Chapter 8-4 환경변수 관리와 python-dotenv 사용법  (0) 2025.05.12
Chapter 8-2 Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)  (0) 2025.05.12
Chapter 8-1 [인스타그램] 회원가입 및 로그인 기능 만들기  (0) 2025.05.12
🚀 Django REST Framework (DRF) 개요 & API 개발 정보 ( 라이브세션 1일차 강의자료 )  (0) 2025.05.12
'Django' 카테고리의 다른 글
  • Chapter 8-5 Django 이메일 인증을 위한 SMTP 설정 가이드
  • Chapter 8-4 환경변수 관리와 python-dotenv 사용법
  • Chapter 8-2 Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)
  • Chapter 8-1 [인스타그램] 회원가입 및 로그인 기능 만들기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (727) N
      • Python (32)
      • 프로젝트 (55) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (10) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    chinanightlife
    skincancerawareness
    foodshortage
    japanricecrisis
    americaparty
    oliveoilhealth
    RM
    newpoliticalparty
    titaniumcase
    youngprofessionals
    뷔
    뷔전역
    urbantrends
    hotcoffeecase
    btsreunion
    smartphonedurability
    뷔제대
    americanlaw
    chansmannewspick
    bts
    globaleconomy
    evoo
    lawsuitculture
    basalcellcarcinoma
    livebroadcast
    militarydischarge
    classaction
    galaxys25ultra
    homebartrend
    trumpmuskclash
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 8-3 Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현)
상단으로

티스토리툴바