๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ก์›น ํ”„๋กœ์ ํŠธ/(๋ฐฑ์—”๋“œ)Django - ํ”„๋กœ์ ํŠธ01

ํ”„๋กœ์ ํŠธ01. base.html์„ค์ • & modelform ์ƒ์„ฑ

์›น์‚ฌ์ดํŠธ์˜ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ base.html๋กœ ๋งŒ๋“ค์–ด ์ƒ์†ํ•ด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ ์ €๋ฒˆ์— ์ƒ์„ฑํ–ˆ๋˜ form์„ modelform์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , post๋กœ ์ฒ˜๋ฆฌํ•ด

memolist์— ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด ์ถœ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

+) admin์‚ฌ์ดํŠธ์— class Entries๋“ฑ๋กํ•˜๊ธฐ

 

์ˆœ์„œ

  • <base.html ์„ค์ •>
  • <modelform ์ƒ์„ฑ>
  • <form์—์„œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’ ๋ฆฌ์ŠคํŠธ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ>
  • <admin์‚ฌ์ดํŠธ์— class Entries ๋“ฑ๋กํ•˜๊ธฐ>

 

<base.html ์„ค์ •>

1. base.html ์ž‘์„ฑ

<!DOCTYPE html>
<html lang="ko">
<head>
    {% load static %}
    <link rel="stylesheet" href="{% static "admin/css/base.css" %}" />
    <title>{% block title %}simple web{% endblock %}</title>
</head>

<body>
  <h1><strong>๊ฐ„๋‹จํ•œ ๋ฉ”๋ชจ ์›น์‚ฌ์ดํŠธ</strong></h1>
  <a href="/simp_web/page"><h2>Home</h2></a>
  <div id="content", name="content">
        {% block content %}
        {% endblock %}
        <br>
    </div>
</body>
</html>

 

2. base.html ์ƒ์†๋ฐ›๋Š” htmlํŒŒ์ผ ์ž‘์„ฑ

ex) base.html์„ ์ƒ์†๋ฐ›๋Š” page.html

{% extends 'simp_web/base.html' %}

{% block content %}
  <li><a href="page/memo">๊ธ€</a></li>
  <li><a href="page/account">๊ณ„์ •๊ด€๋ฆฌ</a></li>
{% endblock %}

 

<modelform ์ƒ์„ฑ>

  • Form class๋ฅผ ์ƒ์†ํ•œ๋‹ค.
  • ์ง€์ •๋œ model๋กœ๋ถ€ํ„ฐ fields์ •๋ณด๋ฅผ ์ฝ์–ด๋“ค์—ฌ, form fields๋ฅผ ์„ธํŒ…ํ•œ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ model instance๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • ์œ ํšจ์„ฑ ๊ฒ€์ฆ์— ํ†ต๊ณผํ•œ ๊ฐ’๋“ค๋กœ ์ง€์ • model instance์— ์ €์žฅ(save)๋ฅผ ์ง€์›ํ•œ๋‹ค
  • validator์„ค์ •์€ models.py์— ์ •์˜ํ•ด์•ผํ•œ๋‹ค.

 

1. models.py/ forms.py/ views.py ํŒŒ์ผ ์ž‘์„ฑ

1-1) models.py ์ž‘์„ฑ

from django.db import models

# Create your models here.
class Entries(models.Model):
    title = models.CharField(max_length=80, null=False)
    content = models.TextField(null=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

1-2) forms.py ์ž‘์„ฑ

from django.forms import ModelForm
from .models import Entries

class CreatememoForm(ModelForm):
    class Meta:
        model = Entries  #์–ด๋–ค ๋ชจ๋ธ?
        fields = ['title','content']   #๋ฌด์Šจ ์ž…๋ ฅ์„ ๋ฐ›์„๊ฑด์ง€

1-3) views.py ์ž‘์„ฑ

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Entries
from .forms import CreatememoForm  

#์ค‘๋žต

def create(request):
    if request.method == "POST":  #post๋ฐฉ์‹์ด๋ฉด
        form = CreatememoForm(request.POST)
        if form.is_valid():   #์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
            form.save()   # ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’ ์ €์žฅ
        return redirect('memolist')
    else:    #get๋ฐฉ์‹์ด๋ฉด
        form = CreatememoForm()

    return render(request, 'simp_web/create.html', {"form":form})

 

2. post๋ฐฉ์‹ vs get๋ฐฉ์‹

2-1) GET

  • URL์— ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์„œ ์ „์†ก๋œ๋‹ค.
  • ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด์˜ ๊ธธ์ด๊ฐ€ ์ œํ•œ. 
  • ํผ๋จธ๋งํฌ(์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž) ์‚ฌ์šฉO.

2-2) POST

  • header์˜ body์— ๋‹ด๊ฒจ์„œ ์ „์†ก๋œ๋‹ค.
  • URL ์ƒ์— ์ „๋‹ฌํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค.(GET์— ๋น„ํ•ด์„œ ๋ณด์•ˆ์ƒ ์•ฝ๊ฐ„์˜ ์šฐ์œ„์— ์žˆ๋‹ค.)
  • ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด ์ œํ•œX.
  • ํผ๋จธ๋งํฌ ์‚ฌ์šฉX.
  • ์„œ๋ฒ„ ์ชฝ์— ์–ด๋–ค ์ž‘์—…์„ ๋ช…๋ น(CRD ๋“ฑ)ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

3. ๊ฒฐ๊ณผ

 

<form์—์„œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’ ๋ฆฌ์ŠคํŠธ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ>

1. views.py์— memolist์ถ”๊ฐ€

def memolist(request):
    memos = Entries.objects.all()
    return render(request, 'simp_web/memolist.html', {'memos':memos})

 

2. memolist.html ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ

{% extends 'simp_web/base.html' %}

{% block title %}memolist{% endblock %}
{% block content %}
    <table class="table">
      {% for item in memos %}
          <tr>
                <td>{{ item.title }}</td>
                <td>{{ item.content }}</td>
            </tr>
      {% endfor %}
    </table>
{% endblock %}

 

3. urls.py์— url๋งคํ•‘

path('simp_web/page/memo/memolist', views.memolist, name='memolist'), #์ถ”๊ฐ€

 

4. ๊ฒฐ๊ณผ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

: memolist ํ…œํ”Œ๋ฆฟ

 

 

 

 

 

 

 

 

 

 

<admin์‚ฌ์ดํŠธ์— class Entries ๋“ฑ๋กํ•˜๊ธฐ>

models.py์— ์žˆ๋Š” Entries๋ฅผ admin.py์— ์ €์žฅ

from django.contrib import admin
from .models import Entries

admin.site.register(Entries)