Django/INSTA

[Django] 장고 CRUD기능 중 CREATE - 인스타 클론코딩

씨주 2024. 1. 21. 23:37

📍 CRUD - CREATE

 

CREATE기능을 구현하기 전 CREATE버튼은 Navbar에 추가하기로 했다.

(정리하면서 Home 링크도 추가함!)

 

📌 # _nav.html

<div class="navbar-nav">
  <a class="nav-link active" aria-current="page" href="{% url 'posts:index' %}">Home</a>
  <a class="nav-link" href="{% url 'posts:create' %}">Create</a>
</div>

 

 

📌 기능 구현에 들어가기 전

더보기

아래와 같이 input, textarea를 직접 지정한 form형태보단 장고의 forms를 이용해서 CREATE 기능을 구현해보려 한다.

# new.html / create.html

<form action="/posts/create/">
    <label for="title">title</label>
    <input type="text" id="title" name="title">
    <label for="content">content</label>
    <textarea name="content" id="content" cols="30" rows="10"></textarea>
    
    <input type="submit">
</form>

 

📌  # forms.py

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = '__all__'

Post의 모든 필드를 form.html에 표기할 것이기 때문에 fields = '__all__'

 

 

📌 # urls.py

urlpatterns = [
    path('create/', views.create, name='create'),
]

 

 

📌 # views.py

from django.shortcuts import redirect
from .forms import PostForm

def create(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('posts:index')
    else:
        form = PostForm()
    context = {
        'form': form,
    }
    return render(request, 'form.html', context)

1. POST요청이 없을 때 PostForm이 비어있는 상태로 호출

2. form을 채운 후 POST로 요청하면 PostForm이 채워진 상태로 form이 유효한지 검토 후 저장

3. 저장 후 index페이지로 redirect 되도록 설정했다.

 

 

📌 # form.html(bootstrap적용 전)

{% extends 'base.html' %}

{% block body %}
<form action="" method = 'POST' enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
    <input type="submit">
</form>    
{% endblock %}

bootstrap적용하여 깔끔하게 만들기

더보기

📌 터미널 창

python -m pip install django-bootstrap5

FE를 다룰건 아니지만 조금이라도 깔끔하게 보이고자 bootstrap을 적용했다.

 

📌 # settings.py

INSTALLED_APPS = [
    "django_bootstrap5",
]

django-bootstrap5를 설치 후 bootstrap form을 적용

 

📌 # form.html(bootstrap적용)

{% extends 'base.html' %}
{% load django_bootstrap5 %}

{% block body %}
<form action="" method = 'POST' enctype="multipart/form-data">
    {% csrf_token %}
    {% bootstrap_form form %}
    <input type="submit">
</form>    
{% endblock %}

훨씬 깔끔해졌다!

 


글이 잘 작성되는지 확인해보자.

 

index페이지에 잘 나타나는 모습을 볼 수 있다.