100일 챌린지/빅데이터기반 인공지능 융합 서비스 개발자

Day 85 - Django로 CRUD 프로그램 만들기 (2) function 활용하기

ksyke 2024. 11. 28. 17:43

python 패키지로 Django 설치하기

root/

settings.py

ALLOWED_HOSTS = ['*']


# Application definition

INSTALLED_APPS = [
    'dept',

urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('dept/', include('dept.urls')),
    path('admin/', admin.site.urls),
]

dept/

views.py

from django.shortcuts import render, redirect

dummyData=[
    {'deptno':1111,'dname':'test1','loc':'test'},
    {'deptno':2222,'dname':'test2','loc':'test'},
    {'deptno':3333,'dname':'test3','loc':'test'},
    {'deptno':4444,'dname':'test4','loc':'test'},
]

# Create your views here.
def list(req):
    context={'datas':dummyData}
    return render(req,"dept/list.html",context)
def add(req):
    if req.method=='GET':
        return render(req,"dept/add.html")
    else:
        # print(dir(req))
        # print(req.body)
        print(req.POST['deptno'])
        print(req.POST['dname'])
        print(req.POST['loc'])
        dummyData.append({'deptno':int(req.POST['deptno']),'dname':req.POST['dname'],'loc':req.POST['loc']})
        return redirect('depts')
def detail(req,deptno,**kwargs):
    # print('detail param:',deptno)
    context={'data':None,'title':kwargs}
    for data in dummyData:
        if data['deptno']==deptno:
            context['data']=data
            break
    return render(req,"dept/detail.html",context)

urls.py

from django.contrib import admin
from django.urls import path

from dept import views

urlpatterns = [
    path('', views.list,name='depts'),
    path('add', views.add,name='add'),
    # path('insert', views.insert),
    path('<int:deptno>', views.detail,{'title':'상세'},name='detail'),
]

templates/

base/base.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Document</title>
</head>
<body>
    <nav>
        <a href="/">home</a>
        <a href="/intro">intro</a>
        <a href="/dept">dept</a>
    </nav>
    {% block contents %}
    {% endblock %}
</body>
</html>

list.html

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

{% block contents %}
    <h2>list page</h2>
    <table>
        <thead>
            <tr>
                <td>deptno</td>
                <td>dname</td>
                <td>loc</td>
            </tr>
        </thead>
    <tbody>
        {% for data in datas %}
        <tr>
            <td><a href="{{data.deptno}}">{{data.deptno}}</a></td>
            <td><a href="{{data.deptno}}">{{data.dname}}</a></td>
            <td><a href="{{data.deptno}}">{{data.loc}}</a></td>
        </tr>
        {% endfor %}
    </tbody>
    </table>
    <a href="add">입력페이지</a>

{% endblock %}

add.html

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

{% block contents %}
    <h2>list page</h2>
    <table>
        <thead>
            <tr>
                <td>deptno</td>
                <td>dname</td>
                <td>loc</td>
            </tr>
        </thead>
    <tbody>
        {% for data in datas %}
        <tr>
            <td><a href="{{data.deptno}}">{{data.deptno}}</a></td>
            <td><a href="{{data.deptno}}">{{data.dname}}</a></td>
            <td><a href="{{data.deptno}}">{{data.loc}}</a></td>
        </tr>
        {% endfor %}
    </tbody>
    </table>
    <a href="add">입력페이지</a>

{% endblock %}

detail.html

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

{% block contents %}
    <h2>{{title.title}} 페이지</h2>
    <form>
        {% csrf_token %}
        <div>
            <input name="deptno" value="{{data.deptno}}" readonly>
        </div>
        <div>
            <input name="dname" value="{{data.dname}}" readonly>
        </div>
        <div>
            <input name="loc" value="{{data.loc}}" readonly>
        </div>
        <div>
            <button>수정</button>
        </div>
    </form>

{% endblock %}