MyPrograming
DKEA (간단 쇼핑몰) 본문
반응형
애플리케이션 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>
반응형
'Python > python 클론코딩' 카테고리의 다른 글
(계속) Django Authentication 기능을 통한 정보 수정 (0) | 2020.04.02 |
---|---|
Django Authentication 기능을 통한 회원 가입 (0) | 2020.04.02 |
인스타그램 클론코딩 (로그인, 로그아웃) (0) | 2020.02.26 |
인스타그램 클론코딩 (회원가입) (0) | 2020.02.17 |
간단한 북스토어 서비스 (0) | 2020.01.07 |