1.users的数据表设计:

1.重建用户表:

1.在settings中配置:

AUTH_USER_MODEL='users.UserProfile'

2.apps/users/models.py中建立UserProfile表:

class UserProfile(AbstractUser):
"""
用户表
"""
nickName=models.CharField(max_length=30,default=‘’,verbose_name='微信名')
avatarUrl = models.CharField(max_length=200, null=True, blank=True, verbose_name='用户头像URL')
open_id = models.CharField(max_length=64, null=True, blank=True, verbose_name='OpenId')
token = models.CharField(max_length=64, null=True, blank=True, verbose_name='token')
gender = models.CharField(max_length=4, choices=(('', '未知'), ('', '男'), ('', '女')), default='',
verbose_name='性别')
city = models.CharField(max_length=20, null=True, blank=True, verbose_name='用户所在市')
longitude = models.CharField(max_length=10, null=True, blank=True, verbose_name='经度')
latitude = models.CharField(max_length=10, null=True, blank=True, verbose_name='纬度')
jifen=models.IntegerField(default=0,verbose_name='积分')
yongjin=models.FloatField(default=0,verbose_name='佣金')
fensi_num=models.IntegerField(default=0,verbose_name='粉丝数') class Meta:
verbose_name='用户'
verbose_name_plural = verbose_name
  def __str__(self):
    return self.nickName

3.执行数据更新命令:

python manage.py makemigrations
python manage.py migrate

2.建立地区表:

1.在apps/users/models.py中建立地区表:

class Area(models.Model):
"""
地区表
"""
CATEGORY_TYPE = (
(1, '省级'),
(2, '市级'),
(3, '区县级'),
)
num=models.IntegerField(default=0,verbose_name='地区编码')
name = models.CharField(default='', max_length=30, verbose_name='地名')
category_type = models.IntegerField(choices=CATEGORY_TYPE, verbose_name='地区级别')
parent_category = models.ForeignKey('self', null=True, blank=True, verbose_name='父类目录',
related_name='sub_cat', on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') class Meta:
verbose_name = '地区'
verbose_name_plural = verbose_name def __str__(self):
return self.name

2.执行数据更新命令:

python manage.py makemigrations
python manage.py migrate

3.建立用户增加积分表

1.在apps/users/models.py中建立 用户增加积分表:

class AddJiFen(models.Model):
"""用户增加积分表"""
user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
ad_jifen = models.IntegerField(default=0, 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.user.nickName

2.执行数据更新命令:

python manage.py makemigrations
python manage.py migrate

2.ad的数据表设计:

1.安装处理图片的依赖包pillow:

pip install pillow

2.在apps/ad/models.py中:

from django.db import models
from datetime import datetime
from users.models import UserProfile,Area
from django.utils.safestring import mark_safe
# Create your models here. class Category(models.Model):
"""
分类表
"""
name=models.CharField(default='',max_length=30,verbose_name='类别名')
category_type=models.IntegerField(choices=((1, '一级类目'),(2, '二级类目')),verbose_name='类别级别')
parent_category=models.ForeignKey('self',null=True,blank=True,verbose_name='父类目录',related_name='sub_cat',on_delete=models.CASCADE)
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 Good(models.Model):
"""广告或店铺"""
title=models.CharField(max_length=15,null=True,blank=True,verbose_name='标题',help_text='最多15字')
desc = models.TextField(default='', max_length=400, verbose_name='描述',help_text='最多400字')
address = models.CharField(max_length=200, default="", verbose_name="详细地址")
mobile = models.CharField(max_length=11, default="", verbose_name="电话")
pv = models.IntegerField(default=0, verbose_name='浏览量')
category = models.ForeignKey(Category, verbose_name="分类", on_delete=models.CASCADE)
area = models.ForeignKey(Area, null=True, blank=True, verbose_name="地区", on_delete=models.CASCADE)
stage = models.IntegerField(default=1, choices=((1, '待审核'),(2, '已发布'),(3,'未通过')), verbose_name="阶段")
user = models.ForeignKey(UserProfile, verbose_name="发布者", on_delete=models.CASCADE)
type = models.IntegerField(default=1, choices=((1, '广告'), (2, '店铺')), verbose_name="类型")
image = models.ImageField(max_length=200,default='smallapp/1.png', upload_to='smallapp/',verbose_name='小程序码')
last_visit_time=models.DateTimeField(default=datetime.now, verbose_name='最后浏览时间')
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')
xian_top=models.IntegerField(default=0, choices=((0,'未置顶'),(1, '置顶'),(2, '超级置顶')), verbose_name="是否县置顶")
shi_top = models.IntegerField(default=0, choices=((0, '未置顶'), (1, '置顶'), (2, '超级置顶')), verbose_name="是否市置顶")
sheng_top = models.IntegerField(default=0, choices=((0, '未置顶'), (1, '置顶'), (2, '超级置顶')), verbose_name="是否省置顶") class Meta:
verbose_name = "发布广告或店铺"
verbose_name_plural = verbose_name def __str__(self):
return self.title def image_url(self):
return mark_safe('<img src="/media/{0}" class="field_img">'.format(self.image)) image_url.short_description = '小程序码' class Prize(models.Model):
"""奖品"""
title = models.CharField(max_length=15, null=True, blank=True, verbose_name='标题', help_text='最多15字')
url=models.CharField(max_length=200, null=True, blank=True, verbose_name='小程序url')
area = models.ForeignKey(Area, null=True, blank=True, verbose_name="地区", on_delete=models.CASCADE)
get_num=models.IntegerField(default=0,verbose_name='被领取数')
price = models.IntegerField(default=0, verbose_name='所需积分')
all_num=models.IntegerField(default=0,verbose_name='发布数')
desc = models.TextField(default='', max_length=400, verbose_name='描述', help_text='最多400字')
usage = models.TextField(default='', max_length=200, verbose_name='使用方式', help_text='最多200字')
image = models.ImageField(max_length=200, default='', upload_to='prizeimg/', verbose_name='奖品图片')
end_time = models.DateTimeField(default=datetime.now, 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.title def image_url(self):
return mark_safe('<img src="/media/{0}" class="field_img">'.format(self.image)) image_url.short_description = '奖品图片' class Images(models.Model):
"""
图片
"""
is_banner=models.BooleanField(default=False,verbose_name='是否是轮播图')
image = models.ImageField(max_length=200, upload_to='images/')
good = models.ForeignKey(Good, verbose_name="广告或店铺",blank=True,null=True, on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') class Meta:
verbose_name = "图片"
verbose_name_plural = verbose_name def image_url(self):
return mark_safe('<img src="/media/{0}" class="field_img">'.format(self.image)) image_url.short_description = '图片' class Top(models.Model):
"""
置顶表
"""
good = models.ForeignKey(Good, verbose_name="广告或店铺",blank=True,null=True, on_delete=models.CASCADE)
xian_end_time = models.DateTimeField(default=datetime.now, verbose_name='县置顶截止时间')
shi_end_time = models.DateTimeField(default=datetime.now, verbose_name='市置顶截止时间')
sheng_end_time = models.DateTimeField(default=datetime.now, verbose_name='省置顶截止时间')
super_xian_end_time = models.DateTimeField(default=datetime.now, verbose_name='县超级置顶截止时间')
super_shi_end_time = models.DateTimeField(default=datetime.now, verbose_name='市超级置顶截止时间')
super_sheng_end_time = models.DateTimeField(default=datetime.now, 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.good.title

3.执行数据更新命令:

python manage.py makemigrations
python manage.py migrate

3.trade数据表设计:

1.apps/trade/models.py中:

from django.db import models
from datetime import datetime
from users.models import UserProfile,Area
from ad.models import Good # Create your models here. class Price(models.Model):
"""置顶服务价格表"""
top_type = models.CharField(max_length=4, choices=(('', '置顶'), ('', '超级置顶')), default='',verbose_name='置顶类型')
price=models.FloatField(default=0,verbose_name="价格")
fanwei=models.CharField(max_length=4, choices=(('', '全县'), ('', '全市'),('', '全省')), default='',verbose_name='置顶类型')
days=models.IntegerField(default=0,verbose_name='天数')
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') class Meta:
verbose_name = '置顶服务价格表'
verbose_name_plural = verbose_name def __str__(self):
return "%s-%s(%d)".format(self.top_type,self.fanwei, self.days) class Order(models.Model):
"""置顶订单"""
user = models.ForeignKey(UserProfile, verbose_name="购买者", on_delete=models.CASCADE)
good=models.ForeignKey(Good,null=True, blank=True, verbose_name="广告或店铺", on_delete=models.CASCADE)
order_sn = models.CharField(max_length=32, null=True, blank=True, unique=True, verbose_name="订单号")
pay_status = models.CharField(choices=(("TRADE_SUCCESS", "成功"),("TRADE_CLOSED", "超时关闭"),("paying", "待支付")),
default="paying", max_length=30, verbose_name="订单状态")
trade_no = models.CharField(max_length=100, unique=True, null=True, blank=True, verbose_name="交易号")
order_mount = models.FloatField(default=0.0, verbose_name="订单金额")
pay_time = models.DateTimeField(null=True, blank=True, verbose_name="支付时间")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "订单表"
verbose_name_plural = verbose_name def __str__(self):
return str(self.order_sn) class ShoppingCar(models.Model):
"""购物车表(置顶)"""
user = models.ForeignKey(UserProfile, verbose_name="购买者", on_delete=models.CASCADE)
order = models.ForeignKey(Order, verbose_name="订单", on_delete=models.CASCADE)
top_good=models.ForeignKey(Price, verbose_name="置顶服务种类",related_name="goods", on_delete=models.CASCADE)
goods_num = models.IntegerField(default=1, verbose_name="置顶服务数量",help_text='目前只支持每次每种置顶服务购买数量为1')
price=models.FloatField(default=0.0, verbose_name="订单金额")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "购物车表"
verbose_name_plural = verbose_name

2.执行数据更新命令:

python manage.py makemigrations
python manage.py migrate

4.user_operation数据表设计:

1.apps/user_operation/models.py中:

from django.db import models
from datetime import datetime
from users.models import UserProfile
from ad.models import Prize
# Create your models here. class Message(models.Model):
"""用户消息表"""
user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
content=models.TextField(default='', max_length=200, verbose_name='消息内容',help_text='最多200字')
is_read=models.BooleanField(default=False,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.content class GetPrize(models.Model):
"""兑奖表"""
user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
prize=models.ForeignKey(Prize, verbose_name="奖品", on_delete=models.CASCADE)
status = models.CharField(choices=(("", "待发货"), ("", "已发货"), ("", "已签收")),default="",
max_length=8, 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.prize class UserAdress(models.Model):
"""用户收货地址"""
user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
address=models.CharField(max_length=300,verbose_name='收货地址',default='',help_text='最多300字')
phone=models.CharField(max_length=11,verbose_name='电话',default='')
name=models.CharField(max_length=15,verbose_name='收件人',default='')
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 Fans(models.Model):
"""粉丝表"""
user=models.ForeignKey(UserProfile, verbose_name="用户", related_name='user',on_delete=models.CASCADE)
fans=models.ForeignKey(UserProfile, verbose_name="粉丝", related_name='fans',on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = "粉丝表"
verbose_name_plural = verbose_name def __str__(self):
return self.user class MakeMoney(models.Model):
"""佣金记录表"""
user = models.ForeignKey(UserProfile, verbose_name="用户", related_name='u',on_delete=models.CASCADE)
fans = models.ForeignKey(UserProfile, verbose_name="粉丝", related_name='f',help_text='从哪个粉丝的消费中分成的',
on_delete=models.CASCADE)
money=models.FloatField(default=0,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.user class GetCash(models.Model):
"""提现记录表"""
user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
money = models.FloatField(default=0, 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.user

2.执行数据更新命令:

python manage.py makemigrations
python manage.py migrate

3.其中“提现记录表”是暂时的,等到后期如果微信的“企业提款到零钱”功能可以开放使用,则要对这个表进行修改。

广告小程序后端开发(2.Models设计)的更多相关文章

  1. 微信小程序后端开发流程

    微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, ...

  2. 微信小程序后端开发(Java语言)笔记

    前言: 因为是第一次真正接触后端开发,从编码到部署服务器到上线,所以做个笔记,也供和我一样的开发小白一些参考. 一.前期工作:开发环境与工具: 1. 编程语言:Java    #笔者还没学PHP,只想 ...

  3. 关于开发微信小程序后端linux使用xampp配置https

    关于开发微信小程序后端linux使用xampp配置https 背景 由于最近开发微信小程序,前后端交互需要使用https协议,故需要配置https服务 服务器环境 服务器系统 ubuntu 环境 xa ...

  4. 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买

    作者图书京东链接,请点击------>>>    **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...

  5. 微信小程序全面实战,架构设计 && 躲坑攻略(小程序入门捷径教程)

    最近集中开发了两款微信小程序,分别是好奇心日历(每天一条辞典+一个小投票)和好奇心日报(轻量版),直接上图: Paste_Image.png 本文将结合具体的实战经验,主要介绍微信小程序的基础知识.开 ...

  6. 微信小程序云开发-从0打造云音乐全栈小程序

    第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过 ...

  7. 前端微信小程序云开发基础讲解

    什么是云开发 云开发与传统模式的对比 云开发能力介绍云开发对小程序开发的变革 云开发是微信团队联合腾讯云提供的原生serverless云服务,致力于帮助更多的开发者快速实现小程序业务的开发,快速迭代. ...

  8. vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

  9. 【微信小程序云开发】从陌生到熟悉

    前言 微信小程序在9月10号正式上线了云开发的功能,弱化后端和运维概念,以前开发一个小程序需要申请一个小程序,准备一个https的域名,开发需要一个前端一个服务端,有了云开发只有申请一个小程序,一个前 ...

随机推荐

  1. bps、bit、byte的区别

    bps是速度单位,bit是大小单位,byte也是大小单位1bps=1bit每秒, 8bit=1byte 1 Byte = 8    bits1 KB   = 1024 Bytes1 MB   = 10 ...

  2. 在MyEclipse中用debug调试应用程序

    F5:单步测试,作用是跳入,比如说一大步中分为10小步,单击F5一次就会走完一小步,走完这一大步则需要单步10次.F6:与F5一样也是单步测试.只不过与F5不同的是F5追求的是过程,而F6追求的是结果 ...

  3. 前端开发之JavaScript HTML DOM理论篇二

    主要内容: 1.HTML DOM元素 2.HTML DOM事件 一.DOM元素 主要操作有添加.删除和替换HTML元素 1.创建新的HTML元素  (1)方法一: appendChild() 追加 如 ...

  4. FreeSWITCH 启用多域(多租户)的配置

    如果将FreeSWITCH用于云端, 支持大规模并发呼叫, 就要用到 多域/多租户 技术了, FreeSWITCH 本身可以直接支持. 每个域可以单独, 拥有相同的分机号也互相打不通, 各自线路, I ...

  5. 【HDU4734】F(x) 【数位dp】

    题意 先定义了一个函数F(X)=An*2^n-1+An-1*2^n-2+.....+A1*1.其中Ai为X的第i位的值.对于每组数据给出了两个整数A,B.问不超过B的数中有多少的F值是不超过F(A)的 ...

  6. shell编程之sed语法

    首先插播条广告:  想要进一个文件夹去 看下面有那些文件 必须对这个文件夹有执行权限. sed p  打印对应的行  2p 打印第二行. -n  只输出经过sed 命令处理的行 看图吧 不太会擅长言语 ...

  7. linux 安装天气插件

    1. 用命令 sudo apt install gnome-shell-extension-weather 安装插件 但是在那之前你安装了 GNOME Shell Extensions 如果没有安装 ...

  8. SQL 数据库 学习 005 学习必备的一些操作 --- 如何新建数据库 如何附加和分离数据库(如何备份还原数据库) 如何删除数据库

    我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Express 如果我们要学习这个数据库,我们需要学习什么知识.比如:如何新建一个数据库 ...

  9. 解决VirtualBox 上的XP 关机时重启 , 启动时蓝屏 ,点击电源选项蓝屏

    三个问题一次性解决. 启动时的蓝屏显示错误信息是: STOP 0x000000CE (...) DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATION ...

  10. spring之IOC容器创建对象

    1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...