二手车Django项目实战--(1)--搭建数据库表

二手车交易平台系统

项目简介
进入21世纪以来,随着国家经济的飞速发展,国民生活水平的不断提高,人们对于生活质量有了更高的需求,汽车对于一个家庭来说可以提供更高的生活上的便利,提高生活的水平,满足日常家庭出行的需求、公司办公需要等,所以中国汽车保有量逐年呈增长趋势,销量有大幅提升。随着汽车数量的不断增加,随之而来的是汽车相关产业井喷式发展。汽车配件,维修,二手车交易等相关产业的觉醒,带来了庞大的需求团体。基于此庞大的市场需求,本平台系统将依托于互联网技术搭建一个O2O( Online To Offline)模式的二手车自助交易平台,替代原有传统二手车交易市场。将原有纯线下交易模式革新为线上线下相结合,以满足二手车进行线上公开透明交易,线下进行实体汽车交付的需求。使得二手车交易过程变得更加安全、公开、透明、公正。

项目需求

设计一个二手车交易平台,满足用户进行按角色注册个人信息,交易的车辆信息,可登录查看相关汽车信息,并可进行在线出价,在线交易,查看相关交易信息。

主题流程

用户浏览网站系统二手车信息(页面展示),查看二手车详细信息(详情页),包括汽车图片、型号、价格、里程、手续资料(PDF上传)等等(汽车相关信息),对于有卖车意向的用户(卖家角色),进行在线注册(注册,加密),登录(登录,验证码),完善个人信息(上传资料),上传汽车信息(上传图片,上传资料),完善汽车信息(上传信息),等待平台审核(平台角色,审核功能),等待买家出价(买家角色,出价功能),确定价格,成功交易(成交撮合)。对于有购买意愿的用户(买家角色),注册,登录,完善个人信息,绑定银行卡(绑定银行卡),进行验证(银行卡验证),平台审核,对与有意向的车辆进行出价,双方达成成交,线下交易。生成相关订单文件(生成PDF)。

分析功能

首页展示(首页页面html,查询)T
列表页展示(html,查询)T
详情页展示(html,查询)T
PDF上传() T X
汽车信息上传(存数据库) T 
买家卖家角色区分(标记字段)
注册(插入数据库)T
邮箱的验证手机号的验证 T x
密码加密(MD5,HASH) T
登录(查数据库)T
验证码 (画笔实现)T 
个人资料上传 (插入数据库)T
上传图片(FILE)T
平台后台功能(DJANGO)T
审核功能(字段)T
撮合功能()TX
出价功能()T
银行卡绑定功能()Tx
生成PDF ()T x
订单功能()T
汽车分类()T
交易功能()T

买家
注册》登录》完善信息》浏览》出价》等待撮合》成交
卖家
注册》登录》完善信息》上传汽车信息》审核》出价》等待撮合》成交
平台
审核, 用户信息管理

设计表

品牌表Brand

id
btitle品牌名称 C
logo_brand车标 Image
is_delete是否删除 B

汽车表CarInfo

brand品牌 F()
ctitle汽车名称 C
engineNo发动机号 C
regist_date上牌日期 DATE
mileage公里数IN
price价格Decimal
debt债务B
picture图片IM
promise卖家承诺TEXT
isPurchase是否购买B
isDelete是否删除B
examine审核进度 IN choices 审核中/审核通过/审核不通过
user卖家F UserInfo

用户表UserInfo

id
username用户名 C
password密码C 200
email邮箱Email
uphone电话C
role角色B INc
realname真是姓名C
idenity身份证号C
sex性别INc

银行表Bank?

id
bankname银行名称C
isDelete是否删除B

银行卡表BankCard

id
user用户 F UserInfo
bank银行 F Bank
bankNo银行卡号C
bankpwd交易密码C200

购买意愿表Cart

id
suser买家 F UserInfo
car 车 F CarInfo
price 价格DE
mileage公里数IN
carDetail车辆信息TEXT

交易记录表Orders

id
buser 买家 F UserInfo
suser 卖家 F UserInfo
price 价格DE
ordertime 成交时间DATETIME
car 车辆信息 O2O ?
mileage公里数IN
orderStatus订单状态INc
isDelete是否删除B

建立项目

建立django项目
django-admin startproject usedcar
建立模块app
python3 manage.py startapp buy
python3 manage.py startapp front
python3 manage.py startapp pay
python3 manage.py startapp sale
python3 manage.py startapp userinfo

启动项目
python3 manage.py runserver 0.0.0.0:8001
初始化m&m
python3 manage.py makemigrations
python3 manage.py migrate
创建超级管理员
python3 manage.py createsuperuser

设置settings模块

# usedcar/settings
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'buy',
    'front',
    'pay',
    'sale',
    'userinfo',
    # 第三方包也要写进来
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'usedcar_db',
        'USER': 'root',
        'PASSWORD':'123456',
        'HOST':'localhost',
        'PORT':3306,
    }
}

# 修改后台为中文
LANGUAGE_CODE = 'zh-Hans'
# 时区设置
TIME_ZONE = 'Asia/Shanghai'

配置usedcar \ init

# 伪装为mysql数据库
import pymysql

pymysql.install_as_MySQLdb()

开始写models
1. buy\models

from django.db import models
from userinfo.models import UserInfo
from sale.models import CarInfo


# Create your models here.
# 购买意愿表Cart
class Cart(models.Model):
    suser = models.ForeignKey(UserInfo, verbose_name='买家', )
    car = models.ForeignKey(CarInfo, verbose_name='车')
    price = models.DecimalField(verbose_name='价格', max_digits=8, decimal_places=2)
    mileage = models.IntegerField(verbose_name='公里数', )
    carDetail = models.TextField(verbose_name='车辆信息', )

    def __str__(self):
        return self.suser

    class Meta:
        verbose_name = '购买意愿表'
        verbose_name_plural = verbose_name


ORDER_CHOICES = (
    (0, '未支付'),
    (1, '已支付'),
    (2, '交易成功'),
    (3, '交易取消'),
)  # 订单状态


# 交易记录表Orders
class Orders(models.Model):
    buser = models.ForeignKey(UserInfo, verbose_name='买家',related_name='buser')
    suser = models.ForeignKey(UserInfo, verbose_name='卖家',related_name='suser')
    price = models.DecimalField(verbose_name='价格', max_digits=8, decimal_places=2)
    ordertime = models.DateField(verbose_name='成交时间', auto_now_add=True)
    car = models.OneToOneField(CarInfo, verbose_name='车辆信息')
    # mileage = models.IntegerField(verbose_name='公里数')
    orderStatus = models.IntegerField(verbose_name='订单状态', choices=ORDER_CHOICES, default=0)
    isDelete = models.BooleanField(verbose_name='是否删除', default=False)

    def __str__(self):
        return self.buser.username

    class Meta:
        verbose_name = '交易记录表'
        verbose_name_plural = verbose_name

2. sale\models

from django.db import models
from userinfo.models import UserInfo


# Create your models here.
class Brand(models.Model):
    btitle = models.CharField(max_length=30, verbose_name='品牌名称')
    logo_brand = models.ImageField(verbose_name='车标',upload_to='img\\car',default='normal.png')
    is_delete = models.BooleanField(verbose_name='是否删除',default=False)

    def __str__(self):
        return self.btitle

    class Meta:
        verbose_name = '品牌表'
        verbose_name_plural = verbose_name

EXAMINE_CHOICES = (
    (0, '审核中'),
    (1, '审核通过'),
    (2, '审核不通过'),
)


class CarInfo(models.Model):
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE, verbose_name='品牌')
    ctitle = models.CharField(max_length=50,null=True, verbose_name='汽车名称')
    engineNo = models.CharField(max_length=100, verbose_name='发动机号',null=True)
    regist_date = models.DateField(verbose_name='上牌日期',null=True)
    mileage = models.IntegerField(verbose_name='公里数')
    price = models.DecimalField(verbose_name='价格',max_digits=8,decimal_places=2)
    debt = models.BooleanField(verbose_name='债务')
    picture = models.ImageField(verbose_name='图片',upload_to='img\\cars',default='normal.png')
    promise = models.TextField(verbose_name='卖家承诺')
    isPurchase = models.BooleanField(verbose_name='是否购买',default=False)
    isDelete = models.BooleanField(verbose_name='是否删除',default=False)
    examine = models.IntegerField(choices=EXAMINE_CHOICES, verbose_name='审核进度',default=0)
    user = models.ForeignKey(UserInfo, verbose_name='卖家')

    def __str__(self):
        return self.user.username

    class Meta:
        verbose_name = '车辆表'
        verbose_name_plural = verbose_name

3. userinfo\models

from django.contrib.auth.models import AbstractUser
from django.db import models

SEX_CHOICES = (
    (0, '男'),
    (1, '女'),
)
# 继承Django的User类。   from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    email = models.EmailField(verbose_name='邮箱')
    uphone = models.CharField(verbose_name='电话', max_length=50, null=True)
    realname = models.CharField(verbose_name='真实姓名', max_length=50, null=True)
    idenity = models.CharField(verbose_name='身份证号', max_length=50, null=True)
    sex = models.IntegerField(verbose_name='性别', choices=SEX_CHOICES, default=0)

    def __str__(self):
        # 重写str方法,显示返回的数据
        return self.username

    def get_sex(self):
        if self.sex == '0':
            return u'男'
        else:
            return u'女'

    class Meta:
        # Django后台的显示
        verbose_name = '用户列表'
        # Django后台的复数显示。
        verbose_name_plural = '用户列表展示'

BANK_CHOICES = (
    (0,'ICBC'),
    (1,'CBC'),
    (2,'BC'),
    (3,'ABC'),
    (4,'CCB'),
    (5,'Alipay'),
)       # 银行列表

class BankCard(models.Model):
    user = models.ForeignKey(UserInfo,verbose_name='用户',)
    bank = models.IntegerField(verbose_name='银行',choices=BANK_CHOICES,default=0)
    bankNo = models.CharField(verbose_name='银行卡卡号',max_length=50,null=True)
    bankpwd = models.CharField(verbose_name='交易密码',max_length=200,null=True)

    def __str__(self):
        return self.user.username

在各自的admin. py 里面注册数据库

userinfo\admin. py
sale\admin. py
buy\admin. py
在这里插入图片描述
执行数据库迁移之后

python manage.py makemigrations
python manage.py migrate

后台界面
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值