新人学习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相关推荐

  1. 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 手机注册和用户登录(中) Json Web Token的原理 因为我们的drf 的 ...

  2. 5- vue django restful framework 打造生鲜超市 -完成商品列表页(上)

    使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...

  3. 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...

  4. 生鲜超市 学习进阶第三天 xadmin的后台管理

    新人学习django 是按照这个大佬的教程学习的 链接: https://www.cnblogs.com/derek1184405959/p/8733194.html. 很多步骤都是按照上面的教程学习 ...

  5. 21- vue django restful framework 打造生鲜超市 -首页商品分类显示功能

    Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 线上演示地址: http://vueshop.mtianyan.cn/ github源代码 ...

  6. 4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍

    使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...

  7. 2022-2027年中国生鲜超市行业市场全景评估及发展战略规划报告

    [报告格式]电子版.纸介版 [出品单位]华经产业研究院 本报告由华经产业研究院出品,对中国生鲜超市行业的发展现状.竞争格局及市场供需形势进行了具体分析,并从行业的政策环境.经济环境.社会环境及技术环境 ...

  8. Django REST framework+Vue 打造生鲜超市(六)

    目录 生鲜超市(一)    生鲜超市(二)    生鲜超市(三) 生鲜超市(四)    生鲜超市(五)    生鲜超市(六) 生鲜超市(七)    生鲜超市(八)    生鲜超市(九) 生鲜超市(十) ...

  9. Django REST framework+Vue 打造生鲜超市(三)

    代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 四.xadmin后台管理 4.1.xadmin添加富文本插件 (1)xadmin/plugi ...

最新文章

  1. java在己有的类创子类怎么创_如何使用Java创建自己的异常子类
  2. python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)
  3. SpringMVC教程--Validation校验
  4. 三大数据驱动机制,助力文娱企业打造高留存、高转化增长闭环
  5. 耶鲁计算机科学专业,Top3美国名校耶鲁大学录取 计算机科学专业
  6. C语言 链表 头插法
  7. 【转载】网络流和最小费用流
  8. c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc
  9. (转)马云又在押宝智能投顾!
  10. Qt的信号槽基本用法总结
  11. 如何长时间保存记忆,分享我的数据备份大法
  12. web前端知识——常见布局方案、文章排版、图片排版、某宝列表
  13. 微信扫码支付 java版
  14. Xcode No certificate for team ‘xxx‘ matching ‘iPhone Developer: xxx (xxx)‘
  15. 教你操作视频横屏改竖屏的方法
  16. EN 10088 1.4006(X12Cr13)马氏体不锈钢硬度
  17. React Native开发之——Webstorm开发RN配置
  18. 运行moveit报错
  19. matlab memory 代数环,[2018年最新整理]simulink代数环解决方法.doc
  20. 去雾算法学习——Fast Visibility Restoration from a Single Color or Gray Level Image笔记

热门文章

  1. zxx学习日报1110
  2. java获取汉字拼音首字母A
  3. 最新C语言零基础入门(带课件+源码)
  4. 用Chrome浏览器调试钉钉应用--Web页面调试
  5. 整车控制器软件功能检测工装
  6. c++(003)梯形面积的计算
  7. 【SpringBoot】SpringBoot配置文件
  8. STO要取代ICO?中国监管叫停,出海人才匮乏,审计成本高达250万
  9. 对AutoCompleteTextBox的扩展
  10. Oracle:ORA-00392: log 3 of thread 1 is being cleared, operation not allowed