μΌνλͺ° μν κ΄λ¦¬ CRUD
μΌνλͺ° κΈ°λ³Έ νμ΄μ§μ μν κ΄λ¦¬ CRUDN κΈ°λ₯μ μΆκ°ν΄λ΄
λλ€.
1.
λ©μΈ νλ©΄
2.
μν λͺ©λ‘
3.
μν μμΈ
4.
μν λ±λ‘ 
5.
μν μμ 
6.
μν μμ 
νλ‘μ νΈ κ΅¬μ‘°
Django νλ‘μ νΈμ κΈ°λ³Έ λλ ν 리 ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€:
μ΄ κ΅¬μ‘°λ Djangoμ νμ€ νλ‘μ νΈ λ μ΄μμμ λ°λ₯΄λ©°, μ μ νμΌ, λ―Έλμ΄ νμΌ, ν
νλ¦Ώ λ±μ΄ 체κ³μ μΌλ‘ ꡬμ±λμ΄ μμ΅λλ€.
μλλ μμ²νμ μν λ±λ‘/μμ /μμ κΈ°λ₯μ Django νλ‘μ νΈμ μΆκ°νλ λ°©λ²μ
λλ€. κΈ°μ‘΄ ꡬ쑰μ λ§μΆ°μ ν
νλ¦Ώ, λ·°, URL, λͺ¨λΈ λ±μ νμ₯νμ΅λλ€.
1. λλ ν 리 λ° ν
νλ¦Ώ ꡬ쑰 μΆκ°
π templates/
β βββ π shop/
β βββ π product_form.html β μν λ±λ‘ & μμ νΌ
β βββ π product_confirm_delete.html β μν μμ νμΈ
Plain Text
볡μ¬
2. λͺ¨λΈ (models.py)
μ΄λ―Έ μλ€λ©΄ μλ΅ κ°λ₯. μμΌλ©΄ λ€μμ²λΌ μμ±νμΈμ:
# shop/models.py
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=200)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField()
image = models.ImageField(upload_to='products/')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
Python
볡μ¬
3. νΌ (forms.py μΆκ°)
shop/forms.py μμ±:
from django import forms
from .models import Product
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name', 'price', 'description', 'image']
Python
볡μ¬
4. λ·° (views.py)
from django.shortcuts import render, get_object_or_404, redirect
from .models import Product
from .forms import ProductForm
def main(request):
return render(request, 'shop/main.html')
def product_list(request):
products = Product.objects.all()
return render(request, 'shop/product_list.html', {'products': products})
def product_detail(request, pk):
product = get_object_or_404(Product, pk=pk)
return render(request, 'shop/product_detail.html', {'product': product})
def product_create(request):
if request.method == 'POST':
form = ProductForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('product_list')
else:
form = ProductForm()
return render(request, 'shop/product_form.html', {'form': form})
def product_update(request, pk):
product = get_object_or_404(Product, pk=pk)
if request.method == 'POST':
form = ProductForm(request.POST, request.FILES, instance=product)
if form.is_valid():
form.save()
return redirect('product_detail', pk=product.pk)
else:
form = ProductForm(instance=product)
return render(request, 'shop/product_form.html', {'form': form})
def product_delete(request, pk):
product = get_object_or_404(Product, pk=pk)
if request.method == 'POST':
product.delete()
return redirect('product_list')
return render(request, 'shop/product_confirm_delete.html', {'product': product})
Python
볡μ¬
5. URL μ€μ (shop/urls.py)
from django.urls import path
from . import views
urlpatterns = [
path('', views.main, name='main'),
path('products/', views.product_list, name='product_list'),
path('products/<int:pk>/', views.product_detail, name='product_detail'),
path('products/create/', views.product_create, name='product_create'),
path('products/<int:pk>/edit/', views.product_update, name='product_update'),
path('products/<int:pk>/delete/', views.product_delete, name='product_delete'),
]
Python
볡μ¬
6. ν
νλ¦Ώ
product_form.html
{% extends "base.html" %}
{% block content %}
<h2>{% if form.instance.pk %}μν μμ {% else %}μν λ±λ‘{% endif %}</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">μ μ₯</button>
</form>
<a href="{% url 'product_list' %}">λͺ©λ‘μΌλ‘</a>
{% endblock %}
HTML
볡μ¬
product_confirm_delete.html
{% extends "base.html" %}
{% block content %}
<h2>μν μμ </h2>
<p>μ λ§λ‘ "{{ product.name }}"μ μμ νμκ² μ΅λκΉ?</p>
<form method="post">
{% csrf_token %}
<button type="submit">μμ </button>
<a href="{% url 'product_detail' product.pk %}">μ·¨μ</a>
</form>
{% endblock %}
HTML
볡μ¬
7. μν 리μ€νΈμμ λ±λ‘/μμ /μμ λ§ν¬ μΆκ°
product_list.html μμ (μμ λ λΆλΆλ§):
<a href="{% url 'product_create' %}">μν λ±λ‘</a>
<ul>
{% for product in products %}
<li>
<a href="{% url 'product_detail' product.pk %}">{{ product.name }}</a>
- <a href="{% url 'product_update' product.pk %}">μμ </a>
- <a href="{% url 'product_delete' product.pk %}">μμ </a>
</li>
{% endfor %}
</ul>
HTML
볡μ¬
μ΄μ λ€μκ³Ό κ°μ κΈ°λ₯μ΄ κ°λ₯ν©λλ€:
β’
/products/create/ β μν λ±λ‘
β’
/products/<pk>/edit/ β μν μμ
β’
/products/<pk>/delete/ β μν μμ
νμνμλ©΄ admin μ°λμ΄λ κ²μ κΈ°λ₯λ μΆκ° λμλ릴 μ μμ΄μ.