天天生鲜—创建数据库
一、分析需求,得到表之間的關(guān)聯(lián)
說明:創(chuàng)建數(shù)據(jù)庫之前應(yīng)該有一個需求分析的過程,這個過程主要是依據(jù)需求方的需求文檔,進行分析,需要什么功能,實現(xiàn)這些功能需要哪些表,表與表之間的關(guān)聯(lián)如何,以及實現(xiàn)一些功能時需要用到哪些技術(shù),都需要在這個步驟分析清楚。
二、依據(jù)表的分析,創(chuàng)建數(shù)據(jù)庫,表
1、創(chuàng)建基類base_model
在項目目錄下創(chuàng)建python文件夾db—>創(chuàng)建python文件base_model.py——>創(chuàng)建基類,代碼如下:
2、user應(yīng)用下創(chuàng)建User表,直接繼承django自導(dǎo)的abstractUser類。
from django.contrib.auth.models import AbstractUser from db.base_model import BaseModel from django.db import modelsclass User(AbstractUser, BaseModel):"""這里是直接使用django自帶的user類"""class Meta:db_table = 'df_user'verbose_name_plural = verbose_name = '用戶'class AddressManager(models.Manager):'''地址模型管理器類'''# 1.改變原有查詢的結(jié)果集:all()# 2.封裝方法:用戶操作模型類對應(yīng)的數(shù)據(jù)表(增刪改查)def get_default_address(self, user):'''獲取用戶默認收貨地址'''# self.model:獲取self對象所在的模型類try:address = self.get(user=user, is_default=True) # models.Managerexcept self.model.DoesNotExist:# 不存在默認收貨地址address = Nonereturn addressclass Address(BaseModel):'''地址模型類'''user = models.ForeignKey('User', verbose_name='所屬賬戶', on_delete=models.CASCADE)receiver = models.CharField(max_length=20, verbose_name='收件人')addr = models.CharField(max_length=256, verbose_name='收件地址')zip_code = models.CharField(max_length=6, null=True, verbose_name='郵政編碼')phone = models.CharField(max_length=11, verbose_name='聯(lián)系電話')is_default = models.BooleanField(default=False, verbose_name='是否默認')# 自定義一個模型管理器對象objects = AddressManager()class Meta:db_table = 'df_address'verbose_name = '地址'verbose_name_plural = verbose_name3、order應(yīng)用下創(chuàng)建訂單信息表,訂單商品表,繼承Basemodel,·
from db.base_model import BaseModel from django.db import models# 這個是訂單相關(guān)的表:訂單信息表,訂單的商品表class OrderInfo(BaseModel):"""訂單信息表"""PAY_METHODS_CHOICE = ((1, '貨到付款'),(2, '微信支付'),(3, '支付寶'),(4, '銀聯(lián)支付'))ORDER_STATUS_CHOICE = ((1, '待支付'),(2, '待發(fā)貨'),(3, '待收貨'),(4, '待評價'),(5, '已完成'))order_id = models.IntegerField(primary_key=True, verbose_name='訂單id')address = models.ForeignKey('user.Address', on_delete=models.CASCADE, verbose_name='地址id')user = models.ForeignKey('user.User', on_delete=models.CASCADE, verbose_name='用戶id')pay_method = models.CharField(max_length=32, choices=PAY_METHODS_CHOICE, default=1, verbose_name='支付方式')total_count = models.IntegerField(verbose_name='總的數(shù)目')total_price = models.DecimalField(max_digits=128, decimal_places=0,verbose_name='總的金額') # max_digits:數(shù)字允許的最大位數(shù);decimal_places:小數(shù)的最大位數(shù)trans_price = models.DecimalField(max_digits=128, decimal_places=0, verbose_name='運費')order_status = models.CharField(max_length=32, choices=ORDER_STATUS_CHOICE, default=1, verbose_name='訂單狀態(tài)')trade_no = models.IntegerField(verbose_name='支付編號')class Meta:db_table = 'df_order_info'verbose_name_plural = verbose_name = '訂單'class OrderGoods(BaseModel):order = models.ForeignKey('OrderInfo', verbose_name='訂單', on_delete=models.CASCADE)sku = models.ForeignKey('goods.GoodsSKU', verbose_name='商品SKU', on_delete=models.CASCADE)count = models.IntegerField(default=1, verbose_name='商品數(shù)目')price = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='商品價格')comment = models.CharField(max_length=256, default='', verbose_name='評論')class Meta:db_table = 'df_order_goods'verbose_name_plural = verbose_name = '訂單商品'4、goods應(yīng)用下創(chuàng)建商品類型表,商品SKU表,商品SPU表,商品圖片表,首頁輪播商品表,首頁分類商品展示表,首頁促銷活動表,繼承Basemodel數(shù)據(jù)庫基類。
from django.db import models from tinymce.models import HTMLField from db.base_model import BaseModelclass GoodsType(BaseModel):"""商品模型類"""name = models.CharField(max_length=32, verbose_name='種類名稱')logo = models.CharField(max_length=32, verbose_name='標(biāo)識')image = models.ImageField(upload_to='type', verbose_name='商品類型圖片')class Meta:db_table = 'df_goods_type'verbose_name_plural = verbose_name = '商品種類'class GoodsSKU(BaseModel):"""商品SKU表"""STATUS_CHOICE = ((0, '下線'), (1, '上線'))type = models.ForeignKey('GoodsType', verbose_name='商品種類',on_delete=models.CASCADE)goods = models.ForeignKey('Goods', verbose_name='商品名稱',on_delete=models.CASCADE)name = models.CharField(max_length=20, verbose_name='商品名稱')desc = models.CharField(max_length=256, verbose_name='商品簡介')price = models.DecimalField(max_digits=32,decimal_places=0, verbose_name='商品價格')unite = models.IntegerField(verbose_name='商品單位')image = models.ImageField(upload_to='goods', verbose_name='商品圖片')stock = models.IntegerField(verbose_name='商品庫存')sales = models.IntegerField(default=0, verbose_name='商品銷量')status = models.CharField(max_length=32,default=1, choices=STATUS_CHOICE, verbose_name='商品狀態(tài)')class Meta:db_table = 'df_goods_sku'verbose_name_plural = verbose_name = '商品'class Goods(BaseModel):"""商品SPU模型"""name = models.CharField(max_length=56, verbose_name='商品名稱')detail = HTMLField(blank=True, verbose_name='商品詳情')class Meta:db_table = 'df_goods'verbose_name_plural = verbose_name = '商品SKU'class GoodsImage(BaseModel):"""商品圖片"""sku = models.ForeignKey('GoodsSKU', verbose_name='商品',on_delete=models.CASCADE)image = models.ImageField(upload_to='goods', verbose_name='圖片路徑')class Meta:db_table = 'df_goods_image'verbose_name_plural = verbose_name = '商品圖片'class IndexGoodsBanner(BaseModel):"""首頁輪播商品展示"""sku = models.ForeignKey('GoodsSKU',on_delete=models.CASCADE)image = models.ImageField(upload_to='banner', verbose_name='圖片')index = models.SmallIntegerField(default=0, verbose_name='展示順序')class Meta:db_table = 'df_index_banner'verbose_name_plural = verbose_name = '首頁輪播商品'class IndexTypeGoodsBanner(BaseModel):"""首頁分類商品展示模型"""DISPLAY_TYPE_CHOICE = ((0, '標(biāo)題'), (1, '圖片'))type = models.ForeignKey('GoodsType', verbose_name='商品類型',on_delete=models.CASCADE)sku = models.ForeignKey('GoodsSKU', verbose_name='商品SKU',on_delete=models.CASCADE)display_type = models.CharField(max_length=56,default=1, choices=DISPLAY_TYPE_CHOICE, verbose_name='展示類型')index = models.SmallIntegerField(default=0, verbose_name='展示順序') # 1,2,3,4class Meta:db_table = 'df_index_type_goods'verbose_name_plural = verbose_name = '主頁分類展示商品'class IndexPromotionBanner(BaseModel):"""首頁促銷活動模型"""name = models.CharField(max_length=32, verbose_name='活動名稱')url = models.URLField(max_length=256, verbose_name='活動鏈接')image = models.ImageField(upload_to='banner', verbose_name='活動圖片')index = models.SmallIntegerField(default=0, verbose_name='展示順序')class Meta:db_table = 'df_index_promotion'verbose_name_plural = verbose_name = '主頁促銷活動'5、cart 應(yīng)用下,無需創(chuàng)建模型
自此,模型來創(chuàng)建完成
三、 數(shù)據(jù)庫遷移
*說明:*這里使用的數(shù)據(jù)庫是sqllite,所以就直接遷移就好,
我運用的事django自帶的認證系統(tǒng),所以在setting.py 配置文件中要加入
1、生成模型:python manage.py make migrations
2、遷移指令:python manage.py migrate
遷移成功
總結(jié)
以上是生活随笔為你收集整理的天天生鲜—创建数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是计算机网络教学反思,《计算机网络实
- 下一篇: 基于tutk方案的p2p源码_以太坊源码