zoukankan      html  css  js  c++  java
  • 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' 
    
  • 相关阅读:
    MySQL视图
    MySQL触发器
    SQL语法详解
    MySQL函数和操作符
    MySQL常用查询
    MySQL数据类型
    MySQL操作详解
    MySQL学习-SQL约束
    MySQL 其它基本操作
    MySQL创建数据库并插入数据
  • 原文地址:https://www.cnblogs.com/Doner/p/11889597.html
Copyright © 2011-2022 走看看