前后端分离项目(二)

model设计和资源导入

  • 项目初始化

  1. 创建以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

扫描二维码关注公众号,回复: 2770489 查看本文章

如果安装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

  1. 替换系统的用户配置 要想替换系统的用户,还得做配置在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

猜你喜欢

转载自blog.csdn.net/xiaoming0018/article/details/81323778