코딩이야기

앱 생성. 본문

BackEnd/장고(Django)

앱 생성.

기획자 비제이 2024. 6. 25. 12:00

장고에서 앱 = 기능이 모여 있는 폴더와 같은 개념.
우리가 흔히 모바일에서 보는 앱과는 그 의미가 다르다.  장고의 앱은 훨씬 더 좁은 의미로 사용한다. 


account라는 폴더안에서, 로그인,회원가입, 로그아웃등의 페이지가 있도록 구성하는 예제. 



1. 앱 생성
account 라는 이름으로 새로운 Django 앱을 생성한다.

python manage.py startapp account

 

2. 모델 작성
account/models.py 파일을 수정하여 유저 모델을 작성한다.

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 추가로 필요한 필드 작성
    pass


# 데이터베이스 관련된 내용을 작성

 

 

3. 폼 작성
account/forms.py 파일을 생성하고 사용자 등록 및 로그인 폼을 작성한다.

from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from .models import CustomUser

class SignUpForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ['username', 'email', 'password1', 'password2']

class LoginForm(AuthenticationForm):
    class Meta:
        model = CustomUser
        fields = ['username', 'password']

 

4. 뷰 작성
account/views.py 파일을 수정하여 회원가입, 로그인, 로그아웃 뷰를 작성한다.

from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.forms import AuthenticationForm
from django.shortcuts import render, redirect
from .forms import SignUpForm, LoginForm

def sign_up(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('home')
    else:
        form = SignUpForm()
    return render(request, 'account/sign_up.html', {'form': form})

def sign_in(request):
    if request.method == 'POST':
        form = LoginForm(request, data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('home')
    else:
        form = LoginForm()
    return render(request, 'account/sign_in.html', {'form': form})

def log_out(request):
    logout(request)
    return redirect('home')

 

5. URL 설정
account/urls.py 파일을 생성하여 URL 패턴을 설정한다.

from django.urls import path
from .views import sign_up, sign_in, log_out

urlpatterns = [
    path('sign_up/', sign_up, name='sign_up'),
    path('sign_in/', sign_in, name='sign_in'),
    path('log_out/', log_out, name='log_out'),
]

 

6. 템플릿 작성
account/templates/account 폴더를 생성하고 sign_up.html 및 sign_in.html 파일을 작성한다.

<!-- sign_up.html -->
<h2>Sign Up</h2>
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Sign Up</button>
</form>

<!-- sign_in.html -->
<h2>Sign In</h2>
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Sign In</button>
</form>

 

7. 프로젝트 URL 설정
최상위 urls.py 파일을 수정하여 account 앱의 URL을 포함시킨다.

 

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/', include('account.urls')),
    path('', include('main.urls')),  # main 앱의 URL 설정
]