model设计和资源导入
-
项目初始化
- 创建以python3.5.2为基础的VueShop虚拟环境 命令:mkvirtualenv -p C:\Python35\python.exe VueShop
2、django-rest-framework简介 django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包。也就是说,使用django-rest-framework也要按照Django .
官网网站:http://www.django-rest-framework.org/ 安装django-rest-framework命令:pip install djangorestframework
安装Django1.11版本命令
Django默认安装最新版本:pip install django
Django后面接版本号就可以了:pip install django==1.11
如果使用pip install安装库比较慢,可以用豆瓣的镜像:
pip install django==1.11 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
卸载Django命令:pip uninstall Django
markdown命令:pip install markdown 作用支持流量api
安装django-filter命令:pip install django-filter
配置mysql数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#使用mysql
'NAME': 'atguigu_shop',#数据库名称
'USER': 'afu',#连接数据库的账号
'PASSWORD' :'afu123456',#连接数据库的密码
'HOST' :'127.0.0.1',#或者localhost,主机
'PORT' :3306,#端口
}
}
安装驱动mysqlclient 如果直接运行会报错,原因是没有装与mysql连接的驱动,mysqlclient是替代MySQL-python的,所以我们装mysqlclient 安装命令:pip install mysqlclient
如果安装mysqlclient出错 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 这种方式适用于在windows上安装大多数库失败后的解决办法 下载后安装进入虚拟环境VueShop命令:workon VueShop 进入安装包目录后执行命令:pip install Twisted-18.4.0-cp35-cp35m-win_amd64.whl
安装图片处理库pillow
安装命令:pip install pillow
1、创建apps包存放所有的app
2、创建存放所有第三包extra_apps的包当我们想把第三方包修改,或者使用第三包的时候可以拷贝到extra_apps包下这样不要安装这个第三方包,而且会随着打包项目一起打包到项目里面
3、创建文件夹media存放图片和文件用于存放图片和文件
4、创建db_tools目录用于存放数据库操作的工具脚本
5、把apps和extra_apps设置成Sources Root 这样的好处,便于导包
6、把app和extra_apps添加到运行环境中
在AtguiguShop目录下的setting.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"))
print("BASE_DIR==",BASE_DIR)
创建应用users
1、在pycharm中启动创建run manage.py Task... 创建users应用命令:startapp users 拖拽到apps包下
from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime
# Create your models here.
class UserProfile(AbstractUser):
"""用户配置"""
#姓名
#max_length=30,最多支持30个字符
#null=True:Django 将空值以NULL 存储到数据库中,默认值是 False;因为当用手机注册的时候,这个可以为NULL
#blank=True:如果为True,则该字段允许为空白,默认值是 False;因为当用手机注册的时候,这个可以为NULL
#verbose_name:admin里面会显示这个别名
name = models.CharField(max_length=30,null=True,blank=True,verbose_name="姓名")
#出生年月
birthday = models.DateField(null=True,blank=True,verbose_name="出生年月")
#性别,默认设置是女性
gender = models.CharField(max_length=6,choices=(("male",u"男"),("female",u"女")),default="female",verbose_name="性别")
#电话
mobile = models.CharField(max_length=11,verbose_name="电话")
#邮箱
email = models.EmailField(max_length=100,null=True,blank=True,verbose_name="邮箱")
#重载meta模块,修改Admin后台中显示的名称
class Meta:
verbose_name = "用户"
verbose_name_plural = "用户"
#返回展现的内容
def __str__(self):
return self.name
#短信验证码
class VerifyCode(models.Model):
#验证码
code = models.CharField(max_length=10,verbose_name="验证码")
# 电话
mobile = models.CharField(max_length=11, verbose_name="电话")
#添加时间,注意default=datetime.now,不要括号
add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间")
# 重载meta模块,修改Admin后台中显示的名称
class Meta:
verbose_name = "短信验证码"
verbose_name_plural = verbose_name
# 返回展现的内容
def __str__(self):
return self.code
- 替换系统的用户配置 要想替换系统的用户,还得做配置在settings.py里面
AUTH_USER_MODEL = "users.UserProfile"#替换系统的用户
2、生成表把前面设置的models 生成表 生成迁移文件命令:makemigrations 迁移文件是创建表的
生成各个应用的迁移文件:makemigrations 生成users应用的迁移文件:makemigrations users
生成表命令: migrate 生成users应用表命令: migrate users
goods的models设计 创建goods应用命令:startapp goods
from django.db import models
from datetime import datetime
# Create your models here.
class GoodsCategory(models.Model):
CATEGORY_TYPE = (
(1, "一级类目"),
(2, "二级类目"),
(3, "三级类目"),
)
#类目名称
name = models.CharField(max_length=20,default="",verbose_name="类目名称")
#类目编码
code = models.CharField(max_length=20,default="",null=True,blank=True,verbose_name="类目编码")
#类目描述
desc = models.CharField(max_length=200,default="",null=True,blank=True,verbose_name="类目描述")
#类目级别
category_type = models.IntegerField(choices=CATEGORY_TYPE,verbose_name="类目级别",help_text="类目级别")
#父级类目指向谁
parent_category = models.ForeignKey("self",related_name="sub_cat",null=True,blank=True,verbose_name="父级类目",help_text="父级类目")
#是否导航
is_tab = models.BooleanField(default=False, verbose_name="是否导航", help_text="是否导航")
# 添加时间
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
class Meta:
verbose_name = "商品类别"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
#品牌名
class GoodsCategoryBrand(models.Model):
#商品类目
category = models.ForeignKey(GoodsCategory,related_name="branks",null=True,blank=True,verbose_name="商品类别",help_text="商品类别")
#名称
name = models.CharField(max_length=20,verbose_name="商品名称",help_text="商品名称")
# 品牌图片
image = models.ImageField(max_length=200, upload_to="brand/images/")
# 品牌描述
desc = models.CharField(default="", max_length=100, verbose_name="品牌描述", help_text="品牌描述")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
class Meta:
##重载meta模块,修改Admin后台中显示的名称
verbose_name = "品牌名"
verbose_name_plural = verbose_name
# 自定义表名
db_table = "goods_goodsbrand"
def __str__(self):
return self.name
class Goods(models.Model):
#商品类目
category = models.ForeignKey(GoodsCategory,null=True,blank=True, verbose_name="商品类目",help_text="商品类目")
#商品编号
good_sn = models.CharField(max_length=50,default="",null=True,blank=True,verbose_name="商品编号")
#商品名称
name = models.CharField(max_length=30, verbose_name="商品名称")
#点击量
click = models.IntegerField(default=0,verbose_name="点击量")
#销量
sold_num = models.IntegerField(default=0,verbose_name="销量")
#收藏量
fav_num = models.IntegerField(default=0, verbose_name="收藏数")
# 库存数
goods_num = models.IntegerField(default=0, verbose_name="库存数")
# 市场价格
market_price = models.FloatField(default=0.0,verbose_name="市场价")
# 本店价格
shop_price = models.FloatField(default=0.0, verbose_name="本店价格")
# 商品简明描述
goods_brief = models.TextField(max_length=500,null=True,blank=True, verbose_name="商品简明描述")
#商品内容,富文本描述
# goods_desc =UEditorField(u'内容',width=1000, height=300, imagePath="goods/images/", filePath="goods/files/",default="")
# 是否承担运费,默认是承担运费
ship_free = models.BooleanField(default=True, verbose_name="是否承担运费")
#封面图
goods_front_image = models.ImageField(upload_to="goods/images/",null=True,blank=True,verbose_name="封面图")
#是否新品
is_new = models.BooleanField(default=False,verbose_name="是否新品")
#是否热销
is_hot = models.BooleanField(default=False,verbose_name="是否热销")
#添加时间
add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间")
# 重载meta模块,修改Admin后台中显示的名称
class Meta:
verbose_name = "商品"
verbose_name_plural = verbose_name
def __str__(self):
return self.name