广告小程序后端开发(2.Models设计)

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,null=True,blank=True,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=((‘0‘, ‘未知‘), (‘1‘, ‘男‘), (‘2‘, ‘女‘)), default=‘0‘,
                              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

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

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=100, 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, ‘已发布‘)), 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=‘‘, upload_to=‘smallapp/‘,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 Prize(models.Model):
    """奖品"""
    title = models.CharField(max_length=15, null=True, blank=True, verbose_name=‘标题‘, help_text=‘最多15字‘)
    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 = ‘图片‘

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

# Create your models here.

class Price(models.Model):
    """置顶服务价格表"""
    top_type = models.CharField(max_length=4, choices=((‘0‘, ‘置顶‘), (‘1‘, ‘超级置顶‘)), default=‘0‘,verbose_name=‘置顶类型‘)
    price=models.FloatField(default=0,verbose_name="价格")
    fanwei=models.CharField(max_length=4, choices=((‘0‘, ‘全县‘), (‘1‘, ‘全市‘),(‘2‘, ‘全省‘)), default=‘0‘,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)
    order_sn = models.CharField(max_length=30, 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=(("0", "待发货"), ("1", "已发货"), ("2", "已签收")),default="0",
                              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.其中“提现记录表”是暂时的,等到后期如果微信的“企业提款到零钱”功能可以开放使用,则要对这个表进行修改。

原文地址:https://www.cnblogs.com/xuepangzi/p/10789768.html

时间: 2024-11-13 04:51:47

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

广告小程序后端开发(16.优惠券系统:原理流程图,奖品实验数据,生成二维码)

业务需求:在一个广告小程序内发许多其他的小程序的优惠券. 1.原理流程图 2.奖品(优惠券)实验数据 1.修改apps/ad/models.py中的Prize表类 class Prize(models.Model): """奖品""" title = models.CharField(max_length=15, null=True, blank=True, verbose_name='标题', help_text='最多15字') url=mo

广告小程序后端开发(5.安装配置django-rest-framework,编写后台登录逻辑)

1.安装djangorestframework 1.安装djangorestframework及其依赖包markdown.django-filter. pip install djangorestframework markdown django-filter 2.在settings中注册,如下: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'dj

广告小程序后端开发(6.获取类别逻辑)

1.获取类别逻辑: 1.在apps/ad目录下新建serializers.py文件进行序列化: from rest_framework import serializers from .models import Category,Good,Prize,Images class CategoryModelSerializer(serializers.ModelSerializer): class Meta: model = Category fields="__all__" class

广告小程序后端开发(7.获取价格表数据)

1.在xadmin后台,手动添加数据: http://127.0.0.1:8000/xadmin/trade/price/ 2.在apps/trade/目录下新建序列化文件serializers.py: from rest_framework import serializers from .models import Price,Order,ShoppingCar class PriceModelSerializer(serializers.ModelSerializer): class Me

微信小程序后端开发总结~1(C#)

1.小程序端对于18位long类型的接收转换会出错,比如171106161246602821-> 171106161246602820. 例如:用户表的主键id存的是18位的biglong类型的,在查询列表的时候,返回的一律是转换成long的数据,android.ios.web端.移动端均正常,只有微信小程序端接收转换的时候出错,然后从列表进详情页就出现拿不到数据的问题,原因就是此时的主键id不存在. 解决方案:接口将long类型转成string类型,再返回. 2.昵称有时候是会输入emoji表

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

第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过本章的学习,能够使大家对本门课程有一个整体的了解.... 第2章 云开发介绍以及从0构建项目本章会详细介绍小程序云开发与Serverless,并介绍如何开通小程序云开发及控制台的功能,并且初始化项目代码,讲解airbnb/javascript代码规范. 第3章 播放列表功能实现本章完成歌单列表与歌曲

小程序 &#183; 云开发

9 月 11 日,微信开发者工具新增小程序「云开发」功能. 大多数开发者在开发应用时和部署服务时,无论是选择公有云还是自建数据中心,都需要提前考虑服务器.存储和数据库等需求,并且会花费时间精力在部署应用.依赖上.而通过「小程序·云开发」,开发者可以开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力,实现小程序的快速上线和迭代. 「小程序·云开发」将以服务的方式为开发者提供如云函数.数据库.存储管理等所需功能,大大降低了小程序的开发门槛,仅需通过「小程序·云开发」提供的接口,就能实现因缺乏后

微信应用号(小程序)开发教程一

开发者网址导航:http://www.dev666.com/ 序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取微信小程序的 AppID 首先,我们需要拥有一个帐号,如果你能看到该文档,我们应当已经邀请并为你创建好一个帐号.注意不可直接使用

餐饮点餐结算小程序定制开发

我设立几个简单的场景来讨论一下之前的商业模式--"地段"是一个很重要的因素,你下了火车,就有一大堆人像你推荐旅馆,而火车站附近的旅馆饭店,上座率也会比较高.但在这个时代,你一下车就可以用手机找到附近打折的还有房间的旅馆同时预约,然后用软件叫车过去入住. 另一个场景则是,以前逛街累了,你会就近找一个饭馆吃饭,而现在可能打开手机找一下周围打折的.用户评价比较高的饭馆去预约吃饭.这时候,传统企业的位置因素就会慢慢的被削弱,而用户评价和口碑则会慢慢通过移动互联网起到更重要的作用.所以,你会发现