第二课 Vue+Django rest framework生鲜项目资源导入项目设计
第一节 项目基本配置
1.1 Django rest framework配置
- 官网:https://www.django-rest-framework.org/
- Django rest framework基于django的REST API的接口开发的框架。
pip install djangorestframework -i https://pypi.douban.com/simple
pip install markdown -i https://pypi.douban.com/simple
pip install django-filter -i https://pypi.douban.com/simple
1.2 数据库配置
- MxShop\settings.py中配置DATABASE.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "mxshop",
'USER': 'root',
'PASSWORD': "123456",
'HOST': "127.0.0.1",
'OPTIONS': {
'init_command': 'SET default_storage_engine=INNODB;'}
}
}
- 新建数据库mxshop, 选择utf8 --UTF-8 Unicode和utf8_general_ci。
- 直接运行项目,发现报错需要配置Mysql的驱动。这里安装mysqlclient, 它其实用来替代我们的mysql-python的。
pip install mysqlclient -i https://pypi.douban.com/simple
- 运行发现成功。
1.3 项目结构调整
- 新建python包apps,用来保存我们所有的app。把users直接拖过去
- 在创建extra_apps, 用来存放第三方包。我们想修改它的源码,这样就不会放入External Libraries中,可以直接修改源码。
- 创建db_tools包,用来存放我们的初始化数据库脚本等脚本文件。
- 创建media文件夹,存放文件图片。templates已经有了。
- 把apps和extra_apps文件夹Mark Directory as, soure root。会给我们导入带来方便。
- 在settings.py中配置,把apps和extra_apps加入到根搜索路径之下。防止在cmd下运行出错
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'))
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201124233854487.png#pic_center)
1.4 前端项目导入
- 下载前端项目进入到online-store文件夹下。
cnpm install
cnpm run dev
http://localhost:8080/
第二节 Model模型设计
2.1 根据业务设计app
- 创建下面三个应用,拖入到apps中
python manage.py startapp goods
python manage.py startapp trade
python manage.py startapp user_operation
- null: 指定数据库存储空值的方式,是数据库范畴。默认值是 False.
- 如果为True,Django 将会把数据库中空值保存为NULL。
- 如果为False,字符串字段存储为空字符,整数存储为0,布尔存储为False,时间存储为zero
- blank:指定输入字段是否为空.
- 如果为True,该字段允许为空值,默认为False。要注意,这与null不同。null纯粹是数据库范畴,指数据库中字段内容是否允许为空,而 blank是表单数据输入验证范畴的。
- 如果一个字段的blank=True,表单的验证将允许输入一个空值。
- 如果字段的blank=False,该字段就是必填的
- choise:由二项元组构成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。
- verbose_name:字段的自述名
- 如果没有给定自述名,Django 将根据字段的属性名称自动创建自述名 —— 将属性名称的下划线替换成空格。
- 在xadmin中字段的名称默认的名称
2.2 user的Model设计
- 设计用户模型apps\users\models.py
- AbstractUser和AbstractBaseUser区别: https://www.cnblogs.com/dongxixi/p/11047087.html
- AbstractUser 类是高度集成的,里面给你定义了一堆的字段
from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):
"""
用户表
"""
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", "女")), default="female",
verbose_name="性别")
mobile = models.CharField(null=True, blank=True, max_length=11, verbose_name="电话")
email = models.EmailField(max_length=100, null=True, blank=True, verbose_name="邮箱")
class Meta:
verbose_name = "用户"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
class VerifyCode(models.Model):
"""
短信验证码
"""
code = models.CharField(max_length=10, verbose_name="验证码")
mobile = models.CharField(max_length=11, verbose_name="电话")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
class Meta:
verbose_name = "短信验证码"
verbose_name_plural = verbose_name
def __str__(self):
return self.code
- 注册到MxShop\settings.py中
AUTH_USER_MODEL = "users.UserProfile"
2.3 goods的Model设计
- 商品的分类的从属关系,一般通过外键的方式设计这种从属关系。
- 因为我们把第一类和其他类级别的分类都放在一个表GoodsCategory中,比如第二类一定会有一个父类。
- 我们如何让外键指向自己, 这里是个知识点。用“self"
- 用下载的源码中的UEditorField支持python3, github上UEditorField可能不支持python3.
- 这里别忘了注册到APPS中,还有之前的应用。
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.users.apps.UsersConfig',
'DjangoUeditor',
'users',
'goods',
'trade',
'user_operation',
]
- 模型初步设计如下: