Day05: 05 - Django架构规划、资料库规划、商品资料准备

Hallo,我是Charlie!
在Day04当中,我们把前端页面结束了,而今天要开始动工後端罗。

================================◉‿◉=================================

首先是Django架构的部分,这里规划成以下几个区块:

  1. 用户服务 (登入、注册、个人资料管理)
  2. 商品服务 (商品详情、总商品)
  3. 订单服务 (订单详情、总订单)
  4. 购物车服务 (增加、修改、删除购物车)

所以可以使用指令来新增APP:

$ python manage.py startapp [APP名称]

在新增完APP之後,结构会是像这样:
https://ithelp.ithome.com.tw/upload/images/20210919/20141666W0EI2Z21nq.png

里面每个APP都会有像这样的结构:
https://ithelp.ithome.com.tw/upload/images/20210919/20141666ERa5hlzo1b.png

其中apps.py是Config,admin则是资料库管理(在product里面会用到),models则是资料模型,views则是视图,另外也会再建立urls.py用来管理路由。

建立完APP之後,必须将APP加入设定,打开[专案名称]\settings.py,在installed_APP底下新增几个APP:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'product',
    'usercart',
    'userorder',
    'users'
]

建立完基本架构後,我们先规划一下资料库。

资料库的话会有几点:

  1. 订单会有product跟user的外键
  2. 购物车也会有product跟user的外键
  3. 购物车会有状态: 0(deactivate) 1(activate)
  4. 订单会有状态: 0(deactivate) 1(not paid) 2(paid) 3(shipping)
  5. 商品会有状态: 0(deactivate) 1(activate)
  6. 用户会有状态: 0(deactivate) 1(activate)

https://ithelp.ithome.com.tw/upload/images/20210919/20141666znmve21ehI.png

所以要在各个model中,建立资料模型,以users为范例:

from django.db import models

class User(models.Model):
	id = models.AutoField(primary_key = True)
	name = models.CharField(max_length = 255,verbose_name = "用户名称")
	password = models.CharField(max_length = 255,verbose_name = "密码")
	phone = models.CharField(max_length = 255,verbose_name = "电话")
	address = models.CharField(max_length = 255,verbose_name = "地址")
	created_time = models.DateTimeField(auto_now = True)
	modified_time = models.DateTimeField(auto_now = True)

	class Meta:
		db_table = "users"

在此介绍一些django常用的model Field:

  • models.IntegerField 整数栏位
  • models.FloatField 浮点数栏位
  • models.CharField 字元栏位
  • models.TextField 长字元栏位
  • models.ImageField 图片栏位

还有外键、主键相关:

  • models.AutoField(primary_key = True) 主键、自增长
  • models.ForeignKey(model, on_delete = models.CASCADE) 外键,Django2.X版本开始需要on_delete参数

把栏位都设置好後,必须设置资料库参数,到[专案名称]\settings.py设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'keyboardmarket[资料库名称]',
        'USER': 'root[MySQL用户名]',
        'PASSWORD': 'MySQL密码',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

设置完後,先登入MySQL,创建keyboardmarket资料库:

$ create database keyboardmarket;

之後打开manage.py,右键”Open Terminal Here”,打开cmd後输入以下两个指令:

注意!两者顺序不可调换

$ python manage.py makemigrations

$ python manage.py migrate

https://ithelp.ithome.com.tw/upload/images/20210919/20141666tMnw5kSKRn.png

migrate成功後,到db查看,即可看到新增完的内容:
https://ithelp.ithome.com.tw/upload/images/20210919/20141666HZgpMbp0cu.png

接着建立一个资料夹叫tools,里面建立一个db.py,这个db.py我们要建立Enum,让我们在填入状态时可以直接使用常量:

from enum import Enum

class CartStatus(Enum):
	deactivate = 0
	activate = 1

class OrderStatus(Enum):
	deactivate = 0
	notPaid = 1
	paid = 2
	shipping = 3

class ProductStatus(Enum):
	deactivate = 0
	activate = 1

class UserStatus(Enum):
	deactivate = 0
	activate = 1

class ProductCategory(Enum):
	keyboard = 0
	earphone = 1
	mouse = 2
	desktop = 3


if __name__ == '__main__':
	print(UserStatus.deactivate.value)

执行db.py,如果成功的话,会印出0。

接下来要使用django自带的後台管理商品,先使用以下指令建立超级管理员:

$ python manage.py createsuperuser

在product中的admin.py新增管理模组:

from django.contrib import admin
from .models import Product

admin.site.register(Product)

在新增之前,因为有product的image要处理,所以先到settings.py新增media root:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

并在keyboardmarket中的urls.py加入static路径:

from django.contrib import admin
from django.urls import path
from keyboardmarket import settings
from django.conf.urls.static import static

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

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然後运行网站,使用127.0.0.1:8000/admin进入後台:
https://ithelp.ithome.com.tw/upload/images/20210919/20141666x8bwdm4mUl.png

点进Products,里面有一个ADD PRODUCTS的按钮,点下去即可新增商品:
https://ithelp.ithome.com.tw/upload/images/20210919/20141666qbRXVl9bqa.png

新增完後查看专案,会发现多出一个media的资料夹,里面有刚刚上传的照片:
https://ithelp.ithome.com.tw/upload/images/20210919/20141666TxnpRYIirf.png

接着打开127.0.0.1:8000/media/productImage/airpod.png,如果有成功显示刚刚的图片就成功罗。

之後就是一笔一笔新建商品,把商品的资料库整个建立起来。

================================◉‿◉=================================

Day05结束了!今天我们完成了Django的基本架构跟资料库,明天我们将开始做用户的登入、注册,See ya next day!


<<:  [Day 14] 实作 API Role-Based Authorization

>>:  Day19 测试写起乃 - 撰写Cucumber

Kotlin Android 第9天,从 0 到 ML - 介面与抽象类别 / 泛型 / 扩充

前言: 今天来看 介面与抽象类别 / 泛型 / 扩充 大纲: Interface 介面,像是一个SO...

Microsoft Azure Machine Learning - Day 2

Chap.I Practical drill 实战演练 以下内容来自这里 Prat1. Create...

Day 23 - 字串又来了,我还是没吃到串烧

Outline 可以把这三个东西理解成 class 的更多运用。 C++ Strings : 比之前...

个人笔记 维修单派工 关联表

开始绘制维修单派工关联表,画错蛮多次。我学习的方式,先在网路上找相关的图参考,思考後进行绘制动作。画...

虹语岚访仲夏夜-10(专业的小四篇)

路过多少门牌 迷失多少时光 流浪於内心深处 什麽 什麽都是迷惘 挤过多少人群 踩过多少小巷 流浪於...