日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

天天生鲜—创建数据库

發(fā)布時(shí)間:2023/12/10 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天天生鲜—创建数据库 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、分析需求,得到表之間的關(guān)聯(lián)

說(shuō)明:創(chuàng)建數(shù)據(jù)庫(kù)之前應(yīng)該有一個(gè)需求分析的過(guò)程,這個(gè)過(guò)程主要是依據(jù)需求方的需求文檔,進(jìn)行分析,需要什么功能,實(shí)現(xiàn)這些功能需要哪些表,表與表之間的關(guān)聯(lián)如何,以及實(shí)現(xiàn)一些功能時(shí)需要用到哪些技術(shù),都需要在這個(gè)步驟分析清楚。

二、依據(jù)表的分析,創(chuàng)建數(shù)據(jù)庫(kù),表

1、創(chuàng)建基類base_model
在項(xiàng)目目錄下創(chuàng)建python文件夾db—>創(chuàng)建python文件base_model.py——>創(chuàng)建基類,代碼如下:

from django.db import modelsclass BaseModel(models.Model):"""創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)的基類,"""create_time = models.DateTimeField(auto_now_add=True, verbose_name='創(chuàng)建時(shí)間')modify_time = models.DateTimeField(auto_now=True, verbose_name='修改時(shí)間')is_delete = models.BooleanField(default=True, verbose_name='刪除標(biāo)記')class Meta:abstract = True # 說(shuō)明這是一個(gè)抽象類的模型。

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.改變?cè)胁樵兊慕Y(jié)果集:all()# 2.封裝方法:用戶操作模型類對(duì)應(yīng)的數(shù)據(jù)表(增刪改查)def get_default_address(self, user):'''獲取用戶默認(rèn)收貨地址'''# self.model:獲取self對(duì)象所在的模型類try:address = self.get(user=user, is_default=True) # models.Managerexcept self.model.DoesNotExist:# 不存在默認(rèn)收貨地址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='是否默認(rèn)')# 自定義一個(gè)模型管理器對(duì)象objects = AddressManager()class Meta:db_table = 'df_address'verbose_name = '地址'verbose_name_plural = verbose_name

3、order應(yīng)用下創(chuàng)建訂單信息表,訂單商品表,繼承Basemodel,·

from db.base_model import BaseModel from django.db import models# 這個(gè)是訂單相關(guān)的表:訂單信息表,訂單的商品表class OrderInfo(BaseModel):"""訂單信息表"""PAY_METHODS_CHOICE = ((1, '貨到付款'),(2, '微信支付'),(3, '支付寶'),(4, '銀聯(lián)支付'))ORDER_STATUS_CHOICE = ((1, '待支付'),(2, '待發(fā)貨'),(3, '待收貨'),(4, '待評(píng)價(jià)'),(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='運(yùn)費(fèi)')order_status = models.CharField(max_length=32, choices=ORDER_STATUS_CHOICE, default=1, verbose_name='訂單狀態(tài)')trade_no = models.IntegerField(verbose_name='支付編號(hào)')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='商品價(jià)格')comment = models.CharField(max_length=256, default='', verbose_name='評(píng)論')class Meta:db_table = 'df_order_goods'verbose_name_plural = verbose_name = '訂單商品'

4、goods應(yīng)用下創(chuàng)建商品類型表,商品SKU表,商品SPU表,商品圖片表,首頁(yè)輪播商品表,首頁(yè)分類商品展示表,首頁(yè)促銷活動(dòng)表,繼承Basemodel數(shù)據(jù)庫(kù)基類。

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)識(shí)')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='商品簡(jiǎn)介')price = models.DecimalField(max_digits=32,decimal_places=0, verbose_name='商品價(jià)格')unite = models.IntegerField(verbose_name='商品單位')image = models.ImageField(upload_to='goods', verbose_name='商品圖片')stock = models.IntegerField(verbose_name='商品庫(kù)存')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):"""首頁(yè)輪播商品展示"""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 = '首頁(yè)輪播商品'class IndexTypeGoodsBanner(BaseModel):"""首頁(yè)分類商品展示模型"""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 = '主頁(yè)分類展示商品'class IndexPromotionBanner(BaseModel):"""首頁(yè)促銷活動(dòng)模型"""name = models.CharField(max_length=32, verbose_name='活動(dòng)名稱')url = models.URLField(max_length=256, verbose_name='活動(dòng)鏈接')image = models.ImageField(upload_to='banner', verbose_name='活動(dòng)圖片')index = models.SmallIntegerField(default=0, verbose_name='展示順序')class Meta:db_table = 'df_index_promotion'verbose_name_plural = verbose_name = '主頁(yè)促銷活動(dòng)'

5、cart 應(yīng)用下,無(wú)需創(chuàng)建模型

自此,模型來(lái)創(chuàng)建完成

三、 數(shù)據(jù)庫(kù)遷移

*說(shuō)明:*這里使用的數(shù)據(jù)庫(kù)是sqllite,所以就直接遷移就好,
我運(yùn)用的事django自帶的認(rèn)證系統(tǒng),所以在setting.py 配置文件中要加入

AUTH_USER_MODEL = 'user.User'

1、生成模型:python manage.py make migrations
2、遷移指令:python manage.py migrate

遷移成功

總結(jié)

以上是生活随笔為你收集整理的天天生鲜—创建数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。