Search
Duplicate

μ‡Όν•‘λͺ° μƒν’ˆ 관리 CRUD

μ‡Όν•‘λͺ° μƒν’ˆ 관리 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 μ—°λ™μ΄λ‚˜ 검색 κΈ°λŠ₯도 μΆ”κ°€ λ„μ™€λ“œλ¦΄ 수 μžˆμ–΄μš”.