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 %}