django 进阶第二天 生鲜超市学习 model
新人学习django 是按照这个大佬的教程学习的
链接: https://www.cnblogs.com/derek1184405959/p/8733194.html.
很多步骤都是按照上面的教程学习的,这里只是记录一下自己学习的过程和一些错误
如果有人想要系统的学习,建议去上面那位大佬处学习
1.创建项目
选择Project Interpreter 时选择你创建的虚拟环境
取消默认使用的Enable Django admin
2.项目初始化
使用pycharm的终端下载相关依赖django2.0.2
djangorestframework和相关依赖mark,filter
pillow 图片处理
pip install djangorestframeworkpip install -i https://pypi.douban.com/simple django==2.0.2pip install markdownpip install django-filterpip install pillowpip install pymysql
3.配置mysql
在settings中配置DATABASES = {
'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': 'mxshop',#数据库名字'USER': 'root', #账号'PASSWORD': 'alotria', #密码'HOST': '127.0.0.1', #IP'PORT': '3306', #端口号#默认引擎引用的是myisam#后面要使用第三方登录,这里设置引擎为INNODB'OPTIONS':{'init_command': 'SET storage_engine=INNODB'}, #这样设置会报错,改为#"OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}
}}安装mysqlClient
下载地址
https://www.lfd.uci.edu/~gohlke/pythonlibs/
根据python的版本进行安装
我的是python3.7版本的 AMD64 所以安装cp37,amd64的mysqlClient
将下载的文件放置到所创建的python项目下,使用
pip install mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl 安装
Mxshop下的
init.py添加代码:
import pymysql
pymysql.install_as_MySQLdb()
4.创建三个app
goods 商品
trade 交易
user_operation 用户操作
users下models设计
from django.db import models
from datetime import datetime
from django.contrib.auth.models import AbstractUserclass UserProfile(AbstractUser):"""用户信息"""#这里是为了在注册时给予选择,只能在这两种选择GENDER_CHOICES=(("male",u"男"),("female",u"女"))#用户用手机注册,所以姓名,生日,邮箱,可以为空username=models.CharField("姓名",max_length=30,null=True,blank=True)gender=models.CharField("性别",max_length=6,choices=GENDER_CHOICES,default="female")birthday=models.DateField("出生年月",null=True,blank=True)mobile=models.CharField("电话",max_length=11)email = models.EmailField("邮箱",max_length=100,null=True,blank=True)class Meta:verbose_name="用户信息"verbose_name_plural=verbose_namedef __str__(self):return self.usernameclass VerifyCode(models.Model):"""验证码"""code=models.CharField("验证码",max_length=10)mobile=models.CharField("电话",max_length=11)add_time=models.DateTimeField("添加时间",default=datetime.now())class Meta:verbose_name="短信验证"verbose_name_plural=verbose_namedef __str__(self):return self.code
# Create your models here.
goods的models设计
(1).安装xadmin
下载xadmin,然后将xadmin放入python项目的文件下运行下面命令安装:pip install xadmin-django2然后可以在虚拟环境下找到xadmin安装的文件夹
然后将xadmin的文件复制到extra_apps的文件夹下面
把extra_apps右键mark为Source Root
配置路由
把admin改成xadmin
#urls.py
from django.urls import path
import xadmin
urlpatterns = [
path(‘xadmin/’, xadmin.site.urls),
]
将settings的文件设置成中文
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = False
(2)增加富文本编辑器Ueditor
下载Ueditor,然后解压到项目目录下
直接pip install DjangoUeditor的方法会出问题
将DjangoUeditor3-master目录下的DjangoUeditor复制出来放到项目目录下
settings中添加app
INSTALLED_APPS = [
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘apps.users.apps.UsersConfig’,
‘xadmin’,
'DjangoUeditor‘,
]
修改MxShop的urls
urlpatterns = [
path('xadmin/', xadmin.site.urls),
path('ueditor/', include('DjangoUeditor.urls')),
]
xadmin/plugs目录下新建ueditor.py文件,代码如下
import xadmin
from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
from DjangoUeditor.models import UEditorField
from DjangoUeditor.widgets import UEditorWidget
from django.conf import settingsclass XadminUEditorWidget(UEditorWidget):def __init__(self, **kwargs):self.ueditor_options = kwargsself.Media.js = Nonesuper(XadminUEditorWidget,self).__init__(kwargs)class UeditorPlugin(BaseAdminPlugin):def get_field_style(self, attrs, db_field, style, **kwargs):if style == 'ueditor':if isinstance(db_field, UEditorField):widget = db_field.formfield().widgetparam = {}param.update(widget.ueditor_settings)param.update(widget.attrs)return {'widget':XadminUEditorWidget(**param)}return attrsdef block_extrahead(self, context, nodes):js = '<script type="text/javascript" src="%s"></script>' %(settings.STATIC_URL + "ueditor/ueditor.config.js")js += '<script type="text/javascript" src="%s"></script>' %(settings.STATIC_URL + "ueditor/ueditor.all.min.js")nodes.append(js)xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
xadmin/plugs/init.py里面添加ueditor插件
5.项目目录搭建
新建两个python package
extra_apps (扩展的源码包)
apps (放所有app)
新建两个文件夹
media (保存图片)
db_tools (数据库相关)
把extra_apps和apps标记为sources root,然后settings中也要加路径
#settings.py
import sys
sys.path.insert(0,BASE_DIR)
sys.path.insert(0,os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))
把四个app、xadmin和DjangoUeditor添加到 INSTALLED_APPS中
INSTALLED_APPS = [
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘apps.users.apps.UsersConfig’,
‘xadmin’,
‘DjangoUeditor’,
‘users’,
‘goods’,
‘trade’,
‘user_operation’,
]
设置media的保存路径
MEDIA_ROOT=os.path.join(BASE_DIR,“media”)
goods的models的设计
from django.db import models
import datetime
from DjangoUeditor.models import UEditorField# Create your models here.
#商品分类的model的设计,商品的分类
class GoodsCategory(models.Model):CATEGORY_TYPE=((1,"一级类目"),(2,"二级类目"),(3,"三级类目"))name=models.CharField("类别名",default="",max_length=30,help_text="类别名")code=models.CharField("类别标识code",default='',max_length=30,help_text="类别code")desc=models.TextField("类别描述",default="",help_text="类别描述")#目录树,类似于父目录和子目录category_type=models.IntegerField("类目级别",choices=CATEGORY_TYPE,help_text="类目级别")#设置指向自己的外键#参数 to=关联的表明,to_field=要关联的表中的字段#on_delete 删除关联表中的数据时,当前表于其关联的行的行为#- models.CASCADE,删除关联数据,与之关联也删除#- models.DO_NOTHING,删除关联数据,引发错误IntegrityError#- models.PROTECT,删除关联数据,引发错误ProtectedError#- models.SET_NULL,删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)# - models.SET_DEFAULT,删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)# - models.SET,删除关联数据,# a.与之关联的值设置为指定值,设置:models.SET(值)# b.与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)parent_category=models.ForeignKey(to="self",on_delete=models.CASCADE,null=True,blank=True,verbose_name="父类目级别",help_text="父目录",related_name="sub_cat")is_tab=models.BooleanField("是否导航",default=False,help_text="是否导航")add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="商品类别"verbose_name_plural=verbose_namedef __str__(self):return self.name#某一大类下的宣传商标
class GoodsCategoryBrand(models.Model):category=models.ForeignKey(GoodsCategory,on_delete=models.CASCADE,related_name="brands",null=True,blank=True,verbose_name="商品类目")name=models.CharField("品牌名",default="",max_length=30,help_text="品牌名")desc=models.TextField("品牌描述",default="",max_length=200,help_text="品牌描述")image=models.ImageField(max_length=200,upload_to="brands/")add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="宣传品牌"verbose_name_plural=verbose_namedb_table="goods_goodsbrand"def __str__(self):return self.name#商品的属性
class Goods(models.Model):category=models.ForeignKey(GoodsCategory,on_delete=models.CASCADE,related_name="brands",null=True,blank=True,verbose_name="商品类目")goods_id=models.CharField("商品唯一货号",max_length=50,default="")name=models.CharField("商品名",max_length=100)click_num=models.IntegerField("点击数",default=0)sold_num=models.IntegerField("商品销售量",default=0)fav_num=models.IntegerField("收藏数",default=0)goods_num=models.IntegerField("库存数",default=0)market_price=models.FloatField("市场价格",default=0)shop_price=models.FloatField("本店价格",default=0)goods_brief=models.TextField("商品简短描述",max_length=500)#利用富文本编辑器对商品进行描述goods_desc=UEditorField(verbose_name=u"内容",imagePath="goods/images/",width=100,height=300,filePath="goods/files",default="")ship_free=models.BooleanField("是否承担运费",default=True)#首页中商品展示的封面图goods_front_image=models.ImageField(upload_to="goods/images/",null=True,blank=True,verbose_name="封面图")#首页中新品展示is_new=models.BooleanField("是否新品",default=False)#商品详情页添加的热卖商品is_hot=models.BooleanField("是否热销",default=False)add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="商品信息"verbose_name_plural=verbose_namedef __str__(self):return self.name#商品轮播图
class GoodsImage(models.Model):goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name="商品",related_name="images")image=models.ImageField(upload_to="",verbose_name="图片",null=True,blank=True)add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="商品轮播"verbose_name_plural=verbose_namedef __str__(self):return self.goods.name#首页轮播的商品
class Banner(models.Model):goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name="商品")image=models.ImageField(upload_to="banner",verbose_name="轮播图片")index=models.IntegerField("轮播顺序",default=0)add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="首页轮播"verbose_name_plural=verbose_namedef __str__(self):return self.goods.name#商品广告
class IndexAd(models.Model):category=models.ForeignKey(GoodsCategory,on_delete=models.CASCADE,verbose_name="商品类目",related_name="category")goods=models.ForeignKey(Goods,on_delete=models.CASCADE,related_name="goods",verbose_name="商品")class Meta:verbose_name="首页广告"verbose_name_plural=verbose_namedef __str__(self):return self.goods.name#搜索栏下方的热搜词
class HostSearchWords(models.Model):keywords=models.CharField("热搜词",default="",max_length=20)index=models.IntegerField("排序",default=0)add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="热搜排行"verbose_name_plural=verbose_namedef __str__(self):return self.keywords
trade的models的设计
from django.db import models# Create your models here.
__author__="wtt"from datetime import datetime
from django.db import models
from MxShop.apps.goods.models import Goods
# get_user_model方法会去setting中找AUTH_USER_MODEL
from django.contrib.auth import get_user_model
User=get_user_model()
#购物车
class ShoppingCar(models.Model):user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="用户")goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name="商品")nums=models.IntegerField("购买数量",default=0)add_time=models.DateTimeField(default=datetime.now,verbose_name="添加时间")class Meta:verbose_name="购物车"verbose_name_plural=verbose_nameunique_together=("user","goods")def __str__(self):return "%s(%d)".format(self.goods.name,self.nums)#订单信息class OrderInfo(models.Model):ORDER_STATUS=(("TRADE_SUCCESS","成功"),("TRADE_CLOSED","超时关闭"),("TRADE_BUYER_PAY","交易创建"),("TRADE_FINISHED","交易结束"),("PAYING","待支付"),)PAY_TYPE=(("alipay","支付宝"),("wechar","微信"),)user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="用户")#订单号唯一order_id=models.CharField("订单编号",max_length=30,null=True,blank=True,unique=True)#微信支付会用到nonce_str=models.CharField("随机加密串",max_length=50,null=True,blank=True,unique=True)#支付宝交易号trade_on=models.CharField("交易号",max_length=100,null=True,blank=True,unique=True)#支付状态pay_status=models.CharField("订单状态",choices=ORDER_STATUS,default="paying",max_length=30)#订单的支付类型pay_type=models.CharField("支付类型",choices=PAY_TYPE,default="alipay",max_length=10)pay_script=models.CharField("订单留言",max_length=200)order_mount=models.FloatField("订单金额",default=0.0)pay_time=models.DateTimeField("支付时间",null=True,blank=True)#用户信息address=models.CharField("收获地址",max_length=20,default="")singer_name=models.CharField("签收人",max_length=20,default="")singer_mobile=models.CharField("联系电话",max_length=11)add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="订单信息"verbose_name_plural=verbose_namedef __str__(self):return str(self.order_id)#订单的商品详情
class OrderGoods(models.Model):order=models.ForeignKey(OrderInfo,on_delete=models.CASCADE,verbose_name="订单信息",related_name="goods")goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name="商品")goods_num=models.IntegerField("商品数量",default=0)add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="订单商品"verbose_name_plural=verbose_namedef __str__(self):return str(self.order.order_id)
user_operations的models的设计
from django.db import models# Create your models here.
__author__="wtt"from datetime import datetime
from django.db import models
from MxShop.apps.goods.models import Goodsfrom django.contrib.auth import get_user_modelUser=get_user_model()#用户的收藏操作
class UserFav(models.Model):user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="用户")goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name="商品",help_text="商品id")add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="用户收藏"verbose_name_plural=verbose_nameunique_together=("user","goods")def __str__(self):return self.user.username
#用户收获地址
class UserAddress(models.Model):user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="用户")province=models.CharField("省份",max_length=100,default="")city=models.CharField("城市",max_length=100,default="")district=models.CharField("区域",max_length=100,default="")address=models.CharField("详细地址",max_length=100,default="")singer_name=models.CharField("签收人",max_length=100,default="")signer_mobile=models.CharField("电话",max_length=11,default="")add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="收获地址"verbose_name_plural=verbose_namedef __str__(self):return self.address#用户留言
class UserLeavingMessage(models.Model):MESSAGE_CHOICE=((1,"留言"),(2,"投诉"),(3,"询问"),(4,"售后"),(5,"求购"),)user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="用户")message_type=models.IntegerField(default=1,choices=MESSAGE_CHOICE,verbose_name="留言",help_text=u"留言类型:1(留言)2(投诉)3(询问)4(售后)5(求购)")subject=models.CharField("主题",max_length=100,default="")message=models.TextField("留言内容",default="",help_text="留言内容")file=models.FileField(upload_to="message/images",verbose_name="上传的文件",help_text="上传的文件")add_time=models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name="用户留言"verbose_name_plural=verbose_namedef __str__(self):return self.subject
django 进阶第二天 生鲜超市学习 model相关推荐
- 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)
Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 手机注册和用户登录(中) Json Web Token的原理 因为我们的drf 的 ...
- 5- vue django restful framework 打造生鲜超市 -完成商品列表页(上)
使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...
- 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)
Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...
- 生鲜超市 学习进阶第三天 xadmin的后台管理
新人学习django 是按照这个大佬的教程学习的 链接: https://www.cnblogs.com/derek1184405959/p/8733194.html. 很多步骤都是按照上面的教程学习 ...
- 21- vue django restful framework 打造生鲜超市 -首页商品分类显示功能
Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 线上演示地址: http://vueshop.mtianyan.cn/ github源代码 ...
- 4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍
使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...
- 2022-2027年中国生鲜超市行业市场全景评估及发展战略规划报告
[报告格式]电子版.纸介版 [出品单位]华经产业研究院 本报告由华经产业研究院出品,对中国生鲜超市行业的发展现状.竞争格局及市场供需形势进行了具体分析,并从行业的政策环境.经济环境.社会环境及技术环境 ...
- Django REST framework+Vue 打造生鲜超市(六)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- Django REST framework+Vue 打造生鲜超市(三)
代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 四.xadmin后台管理 4.1.xadmin添加富文本插件 (1)xadmin/plugi ...
最新文章
- java在己有的类创子类怎么创_如何使用Java创建自己的异常子类
- python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)
- SpringMVC教程--Validation校验
- 三大数据驱动机制,助力文娱企业打造高留存、高转化增长闭环
- 耶鲁计算机科学专业,Top3美国名校耶鲁大学录取 计算机科学专业
- C语言 链表 头插法
- 【转载】网络流和最小费用流
- c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc
- (转)马云又在押宝智能投顾!
- Qt的信号槽基本用法总结
- 如何长时间保存记忆,分享我的数据备份大法
- web前端知识——常见布局方案、文章排版、图片排版、某宝列表
- 微信扫码支付 java版
- Xcode No certificate for team ‘xxx‘ matching ‘iPhone Developer: xxx (xxx)‘
- 教你操作视频横屏改竖屏的方法
- EN 10088 1.4006(X12Cr13)马氏体不锈钢硬度
- React Native开发之——Webstorm开发RN配置
- 运行moveit报错
- matlab memory 代数环,[2018年最新整理]simulink代数环解决方法.doc
- 去雾算法学习——Fast Visibility Restoration from a Single Color or Gray Level Image笔记
热门文章
- zxx学习日报1110
- java获取汉字拼音首字母A
- 最新C语言零基础入门(带课件+源码)
- 用Chrome浏览器调试钉钉应用--Web页面调试
- 整车控制器软件功能检测工装
- c++(003)梯形面积的计算
- 【SpringBoot】SpringBoot配置文件
- STO要取代ICO?中国监管叫停,出海人才匮乏,审计成本高达250万
- 对AutoCompleteTextBox的扩展
- Oracle:ORA-00392: log 3 of thread 1 is being cleared, operation not allowed