Python/python 클론코딩

DKEA (간단 쇼핑몰)

SeongWon 2020. 1. 21. 18:47
반응형

애플리케이션 UI 설계

 

 

 

models.py

from django.db import models

# Create your models here.
class Category(models.Model):
    c_id = models.IntegerField(primary_key=True)
    c_code = models.CharField(max_length=100, blank=True, null=True)
    c_name = models.CharField(max_length=100, blank=True, null=True)
    i_code = models.CharField(max_length=100, blank=True, null=True)
    i_name = models.CharField(max_length=100, blank=True, null=True)

    def __str__(self):
        return self.c_name

class Product(models.Model):
    p_id = models.IntegerField(primary_key=True)
    c_id = models.ForeignKey('Category', on_delete=models.CASCADE, db_column='c_id')
    p_name = models.CharField(max_length=100, blank=True, null=True)
    img_src = models.URLField('img_src', unique=True)
    price = models.IntegerField(null=True)
    link = models.URLField('link', unique=True)

    def __str__(self):
        return self.p_name

 

admin.py

from django.contrib import admin
from dkea.models import Category
from dkea.models import Product
# Register your models here.

class CategoryAdmin(admin.ModelAdmin):
    list_display1 = ('c_id', 'c_code', 'c_name', 'i_code', 'i_name')

class CategoryAdmin(admin.ModelAdmin):
    list_display2 = ('p_id', 'c_id', 'p_name', 'img_src', 'price', 'link')

admin.site.register(Category)
admin.site.register(Product)

 

urls.py

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

# Django의 내장함수를 import
from django.conf.urls import re_path

# 각 url에 매핑시킬 뷰들을 bookmark의 views.py에서 가져와 import
from dkea.views import DkeaListView, DkeaDetailView, DkeaMain


urlpatterns = [
    # path('admin/', admin.site.urls),
    re_path(r'^admin/', admin.site.urls),

    re_path(r'^$', DkeaMain, name='main'),
    re_path(r'^list/(?P<list>c\d+)/$', DkeaListView, name='list'),
    re_path(r'^detail/(?P<detail>\d+)/$', DkeaDetailView, name='detail')

 

 

views.py

from django.shortcuts import render, get_object_or_404
# Bookmark 테이블의 데이터를 가져오기 위해 models.py에서 Bookmark 클래스를 import
from .models import Category, Product
from django.db import connection

# Create your views here.
def DkeaListView(request, list):
    try:
        cursor = connection.cursor()

        strSql = "SELECT dkea.dkea_category.c_code,dkea.dkea_category.c_name,dkea.dkea_product.img_src,dkea.dkea_product.p_name, dkea.dkea_product.p_id"
        strSql += " FROM dkea.dkea_product"
        strSql += " LEFT OUTER JOIN dkea.dkea_category on dkea_category.c_id=dkea_product.c_id WHERE dkea.dkea_category.c_code = (%s)"

        result = cursor.execute(strSql, (list,))
        datas = cursor.fetchall()

        str_cname = "SELECT c_name"
        str_cname += " FROM dkea.dkea_category"

        result2 = cursor.execute(str_cname)
        datas2 = cursor.fetchall()

        connection.commit()
        connection.close()

        cate_cname = {'c_name': datas2[0][0]}

        cate = []
        for data in datas:
            row = {'c_code': data[0],
                   'c_name': data[1],
                   'img_src': data[2],
                   'p_name': data[3],
                   'p_id': data[4]}

            cate.append(row)

    except:
        connection.rollback()
        print("Failed selecting in DkeaListView")

    return render(request, 'category.html', {'cate': cate, 'cate_cname': cate_cname})


def DkeaDetailView(request, detail):
    try:
        cursor = connection.cursor()

        strSql = "SELECT dkea.dkea_category.c_id,dkea.dkea_category.i_name ,dkea.dkea_category.c_name ,dkea.dkea_product.link ,dkea.dkea_product.p_id ,dkea.dkea_product.p_name ,dkea.dkea_product.price"
        strSql += " FROM dkea.dkea_product"
        strSql += " LEFT OUTER JOIN dkea.dkea_category on dkea_category.c_id=dkea_product.c_id WHERE dkea.dkea_product.p_id = (%s)"

        result = cursor.execute(strSql, (detail,))
        datas = cursor.fetchall()

        connection.commit()
        connection.close()

        pro = {'c_id': datas[0][0],
                'i_name': datas[0][1],
                'c_name': datas[0][2],
                'link': datas[0][3],
                'p_id': datas[0][4],
                'p_name': datas[0][5],
                'p_price': datas[0][6]}

    except:
        connection.rollback()
        print("Failed selecting in DkeaDetailView")

    return render(request, 'product.html', {'pro':pro})

def DkeaMain(request):
    try:
        cursor = connection.cursor()

        strSql = "SELECT distinct c_code,c_name"
        strSql+= " FROM dkea.dkea_category"
        result = cursor.execute(strSql)
        datas = cursor.fetchall()

        connection.commit()
        connection.close()

        main = []
        for data in datas:
            row = {'c_code': data[0],
                   'c_name': data[1]
                   }

            main.append(row)

    except:
        connection.rollback()
        print("Failed selecting in DkeaMain")

    return render(request, 'main.html', {'main': main})

 

main.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>DKEA</title>
</head>
<body>
<div>
    <h1>DKEA - 메인 페이지</h1>
    {% for pro in main %}
    <button onclick="window.location.href='{% url 'list' pro.c_code %}'"> {{pro.c_name}} </button>
    {% endfor %}

</div>
</body>
</html>

 

category.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>DKEA CATEGORY</title>
</head>
<body>
    <div>
        <h1>DKEA - 카테고리 별 상품 리스트 페이지</h1>
        {% for pro in cate_cname %}
            <h2> 카테고리 > {{cate_cname.c_name}} </h2>
        {% endfor %}

        <div style="text-align:center">
        {% for pro in cate %}
        <div style="display: inline-block; border:3px solid black; margin:5px">
            <img src="{{pro.img_src}}" width="360" height="350" align="center" border="0"/> <br>
            <p align="center"> <a href="{% url 'detail' pro.p_id %}"> {{pro.p_name}} </a> </p>
        </div>
        {% endfor %}
        </div>

    </div>
</body>
</html>

 

product.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DKEA PRODUCT</title>
</head>
<body>
    <div>
        <h1>DKEA - 상품 상세페이지</h1>
            <h2> 카테고리 > {{pro.c_name}} > {{pro.i_name}}</h2><br>
            <h3> {{pro.c_name}} </h3>
            <h3> {{pro.i_name}} </h3>
                <li> {{pro.p_name}} </li>
                <li> 구매링크 :  <a href="{{pro.link}}"> {{pro.link}} </a> </li>




    </div>

</body>
</html>
반응형