๐Ÿ“•Week5 day2(Django ๋™์  ์›นํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ)

๋ฐ•์ค€ํฌยท2023๋…„ 9์›” 19์ผ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
21/28

Django ์›น์‚ฌ์ดํŠธ

django์—์„œ ์–ด๋–ค ์ •๋ณด์˜ ์š”์ฒญ์— ๋Œ€ํ•ด DB๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณณ์ด Model์ด๋‹ค. Template๊ณผ View์— ์š”์ฒญ๋œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

django๋Š” SQL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š”ORM object์„ ์‚ฌ์šฉํ•ด์„œ DB๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

Model์ƒ์„ฑ

  • models.py๋ฅผ ์ž‘์„ฑํ•ด์„œ Model์„ ์ƒ์„ฑํ•œ๋‹ค.
class Coffee(models.Model):
    name = models.CharField(default = "", null = False)
    price = models.IntergerField()
    is_ice = models.BooleanField()
    ํ•„๋“œ๋ช… = ํ•„๋“œํ˜•ํƒœ
    """
    ๋ฌธ์ž์—ด : CharField
    ์ˆซ์ž : IntergerField, SmallIntegerField
    ๋…ผ๋ฆฌํ˜• : BooleanField
    ์‹œ๊ฐ„/๋‚ ์งœ : DateTimeField
    ๋“ฑ๋“ฑ
    """
  • ๋ชจ๋ธ ๊ด€๋ฆฌ
    ๊ด€๋ฆฌ์ž ๋ชจ๋“œ์—์„œ ๋ชจ๋ธ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    admin.py
from django.contrib import admin
from .models import Coffee

# Register your models here.
admin.site.register(Coffee)

์ด๋ ‡๊ฒŒ ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ ํ›„ ์ €์žฅํ•œ ๋’ค ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๋ฉด
์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚˜์˜จ๋‹ค.

  • migration
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ๋น„๋กฏํ•ด ํ…Œ์ด๋ธ”, ํ•„๋“œ ๋“ฑ์˜ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•จ.

ํŒŒ์ด์ฌ ์žฅ๊ณ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ admin์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋จ
์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผ ์ € ์ƒ์„ฑ๋œ adminํŽ˜์ด์ง€์—์„œ Coffee๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฐ˜์˜๋œ๋‹ค.

python manage.py makemigrations homepage
python manage.py migrate
#์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋จ
  • Template์—์„œ Model ํ™•์ธ(views.py)
    view๋ฅผ ๊ธฐ์ค€์œผ๋กœ model๊ณผ template์ด ์†Œํ†ตํ•œ๋‹ค.
from .models import Coffee
def coffee_view(request):
    coffee_all = Coffee.objects.all()#๋ชจ๋“  ํ–‰์„ ์ „๋ถ€ ๊ฐ€์ ธ์˜ค๋ผ๋Š” ๋œป
    return render(request, 'coffee.html', {"coffee_list":coffee_all})

template์— coffee.htmlํŒŒ์ผ ์ƒ์„ฑํ•œ๋‹ค.

<!DOCTYPE html>
<html>
    <head>
        <title>Coffee List</title>

    </head>

    <body>
        <h1>My Coffee List</h1>
        {% for coffee in coffee_list %}
            <p>{{ coffee.name}}, {{ coffee.price }} </p>
        {% endfor %}
    </body>
</html>

urls.py

from homepage.views import introduce, coffee_view

urlpatterns = [
    path('',index),#127.0.0.1/ ์ด ๊ฒฝ๋กœ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด index์‹คํ–‰ํ•˜๋ผ๋Š” ๋œป
    path('introduce/', introduce), # 127.0.0.1/introduce/
    path('coffee/',coffee_view),
    path('admin/', admin.site.urls),#127.0.0.1/admin/
]

์ด๋ ‡๊ฒŒ ๊ฐ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ๋’ค ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด coffee๋ฆฌ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ถœ๋ ฅ๋œ๋‹ค.

  • Form์œผ๋กœ Template์—์„œ Model ์ˆ˜์ •
    homepage์— forms.py๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
from django import forms
from .models import Coffee#Model ํ˜ธ์ถœ

class CoffeeForm(forms.ModelForm): #ModelForm์„ ์ƒ์†๋ฐ›๋Š” CoffeeForm ์ƒ์„ฑ
    class Meta:
        model = Coffee
        fields = ('name', 'price', 'is_ice')

์ดํ›„ views.py์™€ coffee.htmlํŒŒ์ผ์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

# ์ถ”๊ฐ€
from .forms import CoffeeForm
# ์ˆ˜์ •
def coffee_view(request):
    coffee_all = Coffee.objects.all()
    form = CoffeeForm() # Form์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
    return render(request, 'coffee.html',{"coffee_list":coffee_all})
<!DOCTYPE html>
<html>
    <head>
        <title>Coffee List</title>

    </head>

    <body>
        <h1>My Coffee List</h1>
        {% for coffee in coffee_list %}
            <p>{{ coffee.name}}, {{ coffee.price }} </p>
        {% endfor %}

        <form method="POST">{% csrf_token%}#๋ณด์•ˆ์ฒ˜๋ฆฌ
            {{ coffee_form.as_p }}
            <button type="'submit">Save</button>#Save๋ฒ„ํŠผ
        </form>
    </body>
</html>

ํ•˜์ง€๋งŒ ์ดํ›„ ํ™ˆํŽ˜์ด์ง€์—์„œ save๋ฅผ ํ•ด๋„ ์ถœ๋ ฅ์€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
์ฝ”๋“œ ํ™˜๊ฒฝ์—์„œ save๋ฅผ ํ•œ ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•  ๋ช…๋ น์„ ์ ์–ด์•ผ๋œ๋‹ค.

views.py

def coffee_view(request):
    coffee_all = Coffee.objects.all()#๋ชจ๋“  ํ–‰์„ ์ „๋ถ€ ๊ฐ€์ ธ์˜ค๋ผ๋Š” ๋œป
    # ๋งŒ์•ฝ request๊ฐ€ POST๋ผ๋ฉด:
        #POST๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Form์„ ์™„์„ฑํ•˜๊ณ 
        #Form์ด ์œ ํšจํ•˜๋ฉด -> ์ €์žฅ
    if request.method == "POST":
        form = CoffeeForm(request.POST)#์™„์„ฑ๋œ Form
        if form.is_valid():#์ด ์ฑ„์›Œ์ง„ Form์ด ์œ ํšจํ•˜๋‹ค๋ฉด:
            form.save()# ์ด Form๋‚ด์šฉ์„ Model์— ์ €์žฅ
    form = CoffeeForm()
    return render(request, 'coffee.html', {"coffee_list":coffee_all, "coffee_form":form})

์ด๋ ‡๊ฒŒ coffee๋ชฉ๋ก์„ ์ถœ๋ ฅํ•˜๊ณ  POST๊ธฐ๋Šฅ๊นŒ์ง€ ์ถ”๊ฐ€ํ•œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.
๋~!


profile
๊ฒŒ์„๋ €๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€

0๊ฐœ์˜ ๋Œ“๊ธ€