ttsx1

on_delete=models.CASCADE

外键中设置的:

删除关联数据,与之关联也删除

如: category = mF('GoodsType', '商品类型', on_delete=models.CASCADE)

从上面外键(ForeignKey)和一对一(OneToOneField)的参数中可以看出,都有on_delete参数,而 django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:

TypeError: init() missing 1 required positional argument: 'on_delete'

原文链接:https://blog.csdn.net/buxianghejiu/article/details/79086011

Django中提供了一个AbstractUser类

我们可以用来自由的定制我们需要的model

from django.contrib.auth.models import AbstractUser

class UserProfile(AbstractUser):
    '''
    继承Django的AbstractUser 并向里面添加两条数据内容
    '''
    gender = models.CharField(max_length=6,choices=(('male','男'),('female','女')),default='female',verbose_name='性别')
    memo = models.TextField(null=True, blank=True,verbose_name='便签')
    class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name #指定模型的复数形式是什么,如果不指定Django会自动在模型名称后加一个’s’

在完成后需要在settings.py中设置

AUTH_USER_MODEL = 'app.UserProfile'
来覆盖Django默认的表

在admin.py中注册UserProfile表

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import UserProfile

# Register your models here.

admin.site.register(UserProfile,UserAdmin)#用UserAdmin去注册UserProfile

原文链接:https://blog.csdn.net/lht_521/article/details/80592543

verbose_name 和 verbose_name_plural

db_column和db_table

1.指定字段名: 在定义字段的时候,增加参数db_column=’real_field’;

2.指定表名: 在model的class中,添加Meta类,在Meta类中指定表名db_table

例如在某个models.py文件中,有一个类叫Info:

class Info(models.Model):  
    ''''' 
            信息统计 
    '''  
    app_id = models.ForeignKey(App)  
    app_name = models.CharField(verbose_name='应用名',  max_length=32, db_column='app_name2')  
  
    class Meta:  
        db_table = 'info'  
        verbose_name = '信息统计'  
        verbose_name_plural = '信息统计'  

其中db_column指定了对应的字段名,db_table指定了对应的表明;

如果不这样指定,字段名默认为app_name, 而表明默认为app名+类名: [app_name]_info.

verbose_name指定在admin管理界面中显示中文;verbose_name表示单数形式的显示,verbose_name_plural表示复数形式的显示;中文的单数和复数一般不作区别。

抄于:https://www.cnblogs.com/wangkun122/articles/9291255.html

RESTful API 设计指南

抄于:<http://www.ruanyifeng.com/blog/2014/05/restful_api.html

select_related和prefetch_related的用法与区别

https://mp.weixin.qq.com/s?__biz=MjM5OTMyODA4Nw==&mid=2247484306&idx=1&sn=48a89cdf74edff43d727c61ac14b480a&chksm=a73c63aa904beabc1975f9e38bafb36ac9fff041b0a468fa66c82279b03c1fdbf9364731e0c6&mpshare=1&scene=1&srcid=&sharer_sharetime=1574070290665&sharer_shareid=711b44160c4a469273e88a1c0aaa4694&pass_ticket=FwKjDGCp0PoifJnTXxFIKBYjNyBEZ80Spw2sbPO8hccqkm4AaKta%2FHsuQVQwN0YQ#rd

Python实现支付宝在线支付

抄于: https://www.cnblogs.com/ctztake/p/8513628.html

压缩zipfile

抄于:https://www.cnblogs.com/ctztake/p/9141259.html

数据结构

抄于:https://www.cnblogs.com/ctztake/p/8411252.html

drf认证

抄于:https://www.cnblogs.com/wangkun122/articles/8750656.html

https://www.cnblogs.com/ctztake/p/8419059.html

https://www.cnblogs.com/shi-qi/articles/9629399.html

django PermissionsMixin? 据说不好使,但是道听途说怎么算数,做事实的践行者。不?实用。https://blog.csdn.net/weixin_42134789/article/details/84567337

表结构

1)个人
用户
地址

2)商品
商品sku(各个版本) 如:iPhone11 256g
商品分类 如:iPhone
商品spu(商品名) 如:iPhone11
商品图片
首页分类 --》 不是图片的
首页轮播
促销活动

3)购物车
redis实现

4)订单
订单模型
订单商品

1)个人

先建一个基类表 : 创建的时候都有创建时间的

from django.db import models
class BaseModel(models):
	create_time = mD(a_a= True, '创建时间')
	update_time = mD(a_n = True, '更改时间')
	is_delete = mBool(default = False, '是否删除')

应该是:

class BaseModel(models.Model):
	...
	class Meta:
		abstract = True 	# 指定这个类是一个抽象模型类

用户,继承abstractauth
这个类中有id,name,pwd,email,is_detele...

用户表

from django.auth.contrib.models import Ab..
from db.models import BaseModel
class User(Abstrauth, BaseModel):
	class Meta:
		db_table = 'df_user'
		verbose_name = '用户'
		verbose_name_pural = verbose_name 
		

先建一个获取地址的表

定义获取默认地址的方法、定义获取所有地址的方法。

class AddressManger(models.Manager):
	def getdefaultaddress(self, user): # 获得默认地址
		try:
			# address = models.user.get(user=user, is_default = True)
            # 错了	或者 Address.objects.get()
            address = self.get(user=user, is_default = True)
		# except user.Donotexists:  # 下面的错的也这样该
        except self.model.DoesNotExist:
			address = None
		return address 
		
        
	def getaddress(self, user): # 获得地址
		try:
			address = models.user.get(user=user)
		except user.Donotexists:
			address = None
		return address 
	

地址表

地址有id,用户(外键),地址,邮编,电话,是否默认地址,

class Address(BaseModels):
	name = mF('User', '所属账户')  # user 
    # 漏了
    receiver = mC(20,'收件人')
	addr = mC(128, '收件地址')
	mail = mE(6, '邮编')	# zip_code
	phone = mC(11,'联系电话')	
	is_default = mB(default=True, '是否默认')
	class Meta:
        db_table = 'df_address'
		verbose_name = '地址'
		verbose_name_pural = verbose_name

2)商品

商品sku

商品有type(外键Goods),goods(外键GoodsSPU),名称,简介,价格,单位,库存,销量,商品图片,状态
SKU---> SPU(商品最小)

class GoodsSKU(BaseModels):
    STATE_TYPE_CHOICES = 
    		(
			(0,'下架'),
            (1,'上架')
            )
	type = mF('Goods', '商品种类')
	goods = mF('GoodsSPU', '商品SPU')
	name = mC(20,'商品名')
	desc = mC(256, '商品简介')
	price = mD(10, d_p=2, '商品价格')
	unite = mC(10, '商品单位')
	image = mI(upload = 'goods', '商品图片')
	# stock = mI(10,default=1, '商品库存')
	# sales = mI(10,default=0, '商品销量')
    stock = mI(default=1, '商品库存')
    sales = mI(default=0, '商品销量')
    status = mSI(default=1, choices = STC, '商品状态')
	class Meta:
		db_table = 'df_goods_sku'
		verbose_name = '商品SKU'
		verbose_name_pural = verbose_name

商品种类

商品种类表字段有 名称,标识,图片,标题

class GoodType(BaseModel):

	name = mC(10, '商品种类')
	logo = mC(10, '商品标识')
	image = mI(upload_to='goods', '商品图片')
	
	class Meta:
    	db_table = 'df_goods_type'
		verbose_name = '商品种类'
		verbose_name_pural = verbose_name
 	def __str__(self):
		return self.name

错误的

​ 多写了,首页分类商品展示模型类里的

STAUTS_CHOICES = (
	(1,'标题'),
    (2,'图片')
)
stauts = mSI(defalut=1, '')   

​ 少了

def __str__(self):
	return self.name

商品SPU

  • 记录网站所以商品的小类类别信息
  • 表字段:ID、名称、详情

引入富文本

安装  django_tinymce == ..
配置	Instal_app = 'tinymce'
TINYMCE_DEFAULT_CONFIG = {'theme':'advanced', 'width':600, 'height':400}
项目中导入 url(r'^tinymce/$',include('tinymce.urls')), # 富文本编辑器

表字段有名称,链接,描述

from tinymce import HtmlField
class Goods(BaseModel):
	name = mC(10, '商品SPU名')
	# url = HtmlField('', '商品链接')
	# image = mI(upload_to='goods', '商品图片')
    # 后抄
    detail = HtmlField(blank=True, '商品详情')
    class Meta:
        db_table = 'df_goods'
        verbose_name = '商品SPU'
        verbose_name_pural = verbose_name

关于商品首页图片等活动字段小结

商品图片 首页分类(没有图片) 首页商品轮播 促销活动

字段 字段 字段 字段
GoodsImage sku(F('GSKu')) image goods
IndexTypeGoodsBanner sku(F('GSKU')) category(F'GT') displ_type index
IndexGoodsBanner sku(F('GSKu')) image banner index
IndexPromotionBanner name url('活动链接') image banner index

外键的都要+on_delete=models.CASCADE ((里)三个内容)

首页分类需要用到GoodsType里的字段 --> 所以category(F'GT')

image 是图片好像要到DFS中加载把,还是什么? 用的upload_to = 'goods'/'banner'

index 都是展示顺序 mSI(default=0,'展示顺序')

商品图片表

class GoodsImage(BaseModel):
	name = mC(10, '商品名')
	

不熟(抄):

	
    sku = Fk('GoodsSKu', '商品',on_delete=models.CASCADE)
	image = mI(upload_to = 'goods', '图片路径')
    class Meta:
        'df_goods_image'
        '商品图片'
  • 记录所有商品的图片url

  • 表字段:ID、SKU ID(外键)、图片URL

首页分类商品表

字段是goodtype的外键? 前面的也有照片,和这里的有什么不同。

class GoodsType(BaseModel):
    

不熟(抄):

​ 外键

​ on_delete=models.CASCADE

​ # 删除关联数据,与之关联也删除

class IndexTypeGoodsBanner(BaseModel):
	DISPLAY_TYPE_CHOICES = (
		(0,'标题'),
		(1,'图片'),
	)
    category = mF('GoodsType', '商品类型', on_delete=models.CASCADE)
    sku = mF('GoodsSKu','商品SKU', on_delete=mC)
    display_type = mSI(default=1, choices=DTC, '展示类型')
    index = mSI(default=0, '展示顺序')
    class Meta:
        'df_index_type'
        '主页分类展示'
  • 首页各类商品要显示的商品
  • 表字段:ID、商品种类ID(外键)、SKU ID(外键)、展示类型(标题或图片)、展示顺序

商品首页轮询表

class IndexGoods(BaseModel):
		

不熟(抄):

  • 记录首页轮播区的商品信息

  • 表字段:ID、 SKU ID(外键)、图片URL、展示顺序

  • class IndexGoodsBanner(BaseModel):
    	sku = mF('GoodsSKU', '商品', on_delete)
        image = mI(upload_to='banner', '图片')
        index = mSI(default=0, '展示顺序')
        class Meta:
            	'df_index_banner'
                '首页轮播商品'
                
    

首页促销活动表

class GoodsProtomtion(BaseModel):
		

不熟(抄):

  • 记录首页要展示的促销活动信息

  • 表字段:ID、活动图片、活动页面链接URL、展示顺序

  • class IndexPromotionBanner:
    	name = mC(20,'活动名称')
        url = mC(256,'活动链接')
        image = mI('banner','活动图片')
        index = mSI(default=0, '展示顺序')
        class Meta:
            'df_index_promotion'
            '主页促销活动'
    

4)订单

为什么有两个订单? 一个是订单关联了用户,一个关联了商品

订单信息

class Order(BaseModel):
	PAY_METHODS = (
				1,'货到付款',
				2,'微信支付',
				3,'支付宝支付',
				4,'银联支付'
				)
	PAY_METHODS_CHOICES =(
				(1,'货到付款'),
				(2,'微信支付'),
				(3,'支付宝支付'),
				(4,'银联支付')
				) 				
	ORDER_STATUS = (
				1,'已发货',
				2,'已收货',
				3,'已评价',
				5,'')
	ORDER_STATUS_CHOICES = (
				(1,'已发货'),
				(2,'已收货'),
				(3,'已评价'),
				(5,''))			
	
    # 后抄
    order_id = mC(128,primary_key=True,'订单id')
    
    user = mF('user.User','用户', ondelete)
	addr = mF('user.address', '地址',  ondelete)
	
    pay_method = mSI(choices=PMC, default=1,'支付方式')
    total_num = mI(default=1, '商品总数') # de=1?
    total_price = mD(10,2, '商品总价')
    trific_pay = mD(10,2, '订单运费')
	order_status = mSI(choices=OSC, default=1,'订单状态')
	
    # 后抄
    trade_no = mC(128,default='','支付编号')
    
    class Meta:
        db_table = 'df_order' # df_order_info
        verbose_name = '订单'
        verbose_name_pural = verbose_name

订单商品

class OrderGood(BaseModel):
    order = mF('Order','订单') # on_delete
	goods = mF('goodsku', '商品SKU')	# on_delete
    num = mC(10, '商品数目')
    price = mD(10,'商品价格')
    class Meta:
        db_table = 'df_order_goods'
        verbose_name = '订单商品'
        verbose_name_pural = verbose_name

少写了

​ comment= mC(256,default='','评论')

配置settings

import pymysql 
pymysql.install_as_MySQLdb()
dababase = [
		'ENGINE' : 'django.db.backend.mysql',	
    	'NAME','HOST','PORT','USER','PASSWORD',
		]

除此之外,因为我们使用了django内置的认证User类,并自定义了一个子类。因此需要在settings中指定应该采用的认证User类

# 指定django认证系统使用的用户模型类
AUTH_USER_MODEL= 'user.User' 
posted @ 2019-11-19 15:06  learnacode  阅读(272)  评论(0编辑  收藏  举报