django 天天生鲜项目学习二
该项目的需求,功能分析视频教程都有请看视频,接下来我主要介绍我敲代码中的不同之处,以及该项目所有的技术有哪些。我本是一个前端开发,有关python的博客都是初学过程的记录。
数据库 mysql
- 安装mysql 依赖包
pip install pymysql
- dailyfresh -> settings.py 配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dailyfresh', # 数据库名称
'USER': 'root', # 账号
'PASSWORD': 'root', # 密码
'HOST': 'localhost', # ip
'PORT': 3306, # 端口号
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;", # 取消外键检查
}
}
}
- dailyfresh -> init.py 配置:
import pymysql
pymysql.install_as_MySQLdb()
模型类
由于我的django2.0以上版本与视频1.8版本不同,模型类里面外键里面多一个on_delete属性
user -> models.py
本项目采用django的认证系统,User继承了django.contrib.auth.models.AbstractUser类
from django.db import models
from django.contrib.auth.models import AbstractUser
from db.base_model import BaseModel
# Create your models here.user_permissions
class User(AbstractUser, BaseModel):
'''用户模型类'''
class Meta:
db_table = 'df_user'
verbose_name = '用户'
verbose_name_plural = verbose_name
class AddressManager(models.Manager):
'''地址模型管理器类'''
def get_default_address(self, user):
try:
address = self.get(user=user, is_delete=False, is_default=True)
except self.model.DoesNotExist:
address = None
return address
class Address(BaseModel):
'''地址模型类'''
user = models.ForeignKey('User', verbose_name='所属账户', on_delete=models.CASCADE)
receiver = models.CharField(max_length=20, verbose_name='收件人')
addr = models.CharField(max_length=256, verbose_name='收件地址')
zip_code = models.CharField(max_length=6, null=True, verbose_name='邮政编码')
phone = models.CharField(max_length=11, verbose_name='联系电话')
is_default = models.BooleanField(default=False, verbose_name='是否默认')
# 自定义一个模型管理器对象
objects = AddressManager()
class Meta:
db_table = 'df_address'
verbose_name = '地址'
verbose_name_plural = verbose_name
为了让我们创建的User类内能替换django默认的类需要在settings.py配置添加如下配置:
# django认证系统使用的模型类
AUTH_USER_MODEL='user.User'
django模型类 更多的属性和方法,请参加django的官方文档:
https://docs.djangoproject.com/zh-hans/2.2/
迁移
迁移由两步完成:
- 生成迁移文件:根据模型类生成创建表的迁移文件。
- 执行迁移:根据第一步生成的迁移文件在数据库中创建表。
生成迁移文件命令如下:
python manage.py makemigrations
执行迁移命令如下:
python manage.py migrate
补充说明:
- goods模型类里面 的 HTMLField字段类型,需要安装 django-tinymce
- goods模型类里面 的 ImageField字段类型,需要安装Pillow
- 这个项目order模块里面的模型类含有 user和goods模块里面的模型类的外键,最 好是先迁移 user和goods模块里的模型类,之后再把order模型类拷入,再开始执行迁移命令。否则会报错,造成数据库里缺表。
tinymce 富文本编辑器
商品SPU类的HTMLField类型是采用的tinymce的字段类型,需要使用 tinymice
from tinymce.models import HTMLField
class Goods(BaseModel):
'''商品SPU模型类'''
name = models.CharField(max_length=20, verbose_name='商品SPU名称')
# 富文本类型:带有格式的文本
detail = HTMLField(blank=True, verbose_name='商品详情')
class Meta:
db_table = 'df_goods'
verbose_name = '商品SPU'
verbose_name_plural = verbose_name
安装 tinymce
pip install django-tinymce
配置
- settings.py配置
INSTALLED_APPS = (
....
'tinymce'
)
TINYMCE_DEFAULT_CONFIG = {
'theme': 'advanced',
'width': 600,
'height': 400,
}
- 在dailyfresh目录下urls.py 配置:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('tinymce/', include('tinymce.urls')), # 富文本编辑器
path('user/', include(('user.urls', 'user'), namespace='user')), # 用户模块
path('cart/', include(('cart.urls', 'cart'), namespace='cart')), # 购物车模块
path('order/', include(('order.urls', 'order'), namespace='order')), # 订单模块
path('', include(('goods.urls', 'goods'), namespace='goods')), # 商品模块
]