首页 > 其他分享 >订单交易平台二(写代码之前的准备工作)

订单交易平台二(写代码之前的准备工作)

时间:2024-10-05 21:44:20浏览次数:9  
标签:default name models max 代码 订单 True 交易平台 verbose

订单交易平台准备工作

1.先搭建环境

# 1.先创建python基本环境,并且创建虚拟环境


# 2.创建完成后,先安装你所需要的Django版本:
pip install Django==3.2

# 3.创建Django项目:
django-admin startproject app01 .

# 4.创建Django,在app01根目录文件下创建apps文件,里面放app文件:
python manage.py startapp api apps/api

img

img

img

img

2.环境搭建完成后,进行settings项目配置(Mysql、redis、templates、static)

2.1 在app中创建static文件(css、js、images、plugins)、templates文件

img

2.2 配置settings文件

# mysql配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day06',
        'USER': 'root',
        'PASSWORD': 'zt7758521',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

# 配置静态文件
STATIC_URL = '/static/'


# 配置models文件
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'


# 配置将来登录界面所需要的东西
MENU = {
    "ADMIN": [],
    "CUSTOMER": [],
}
PERMISSION = {
    "ADMIN": {},
    "CUSTOMER": {},
}

# 配置cache缓存(redis)
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
            "PASSWORD": "",
        }
    }
}

# 配置session配置
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

SESSION_COOKIE_NAME = "sid"  # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
SESSION_COOKIE_PATH = "/"  # Session的cookie保存的路径
SESSION_COOKIE_DOMAIN = None  # Session的cookie保存的域名
SESSION_COOKIE_SECURE = False  # 是否Https传输cookie
SESSION_COOKIE_HTTPONLY = True  # 是否Session的cookie只支持http传输
SESSION_COOKIE_AGE = 1209600  # Session的cookie失效日期(2周)

SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST = True  # 是否每次请求都保存Session,默认修改之后才保存

# 配置本地local_setting
try:
    from .local_settings import *
except Exception:
    pass

img

3.在urls.py中写入路由配置

# from django.contrib import admin
from django.urls import path
from web.views import account

urlpatterns = [
    # path('admin/', admin.site.urls),
    # 登录界面
    path('login/', account.login, name="login"),  
    # 短信登录界面
    path('sms/login/', account.sms_login, name="sms_login"),
]

img

4.在view文件夹中创建视图函数,account.py,并且在templates文件下创建两个前端界面

# 写入urls所需要的视图函数

from django.shortcuts import render, redirect

def login(request):
  return render(request,'login.html')

def sms_login(request):
  return render(request,'sms_login.html')

img

5.设计本项目的数据库表(在models.py中)

from django.db import models


class ActiveBaseModel(models.Model):
    active = models.SmallIntegerField(verbose_name="状态", default=1, choices=((1, "激活"), (0, "删除"),))

    class Meta:
        abstract = True


class Administrator(ActiveBaseModel):
    """ 管理员表 """
    username = models.CharField(verbose_name="用户名", max_length=32, db_index=True)
    password = models.CharField(verbose_name="密码", max_length=64)
    mobile = models.CharField(verbose_name="手机号", max_length=11, db_index=True)
    create_date = models.DateTimeField(verbose_name="创建日期", auto_now_add=True)


class Level(ActiveBaseModel):
    """ 级别表 """
    title = models.CharField(verbose_name="标题", max_length=32)
    percent = models.IntegerField(verbose_name="折扣")


class Customer(ActiveBaseModel):
    """ 客户表 """
    username = models.CharField(verbose_name="用户名", max_length=32, db_index=True)
    password = models.CharField(verbose_name="密码", max_length=64)
    mobile = models.CharField(verbose_name="手机号", max_length=11, db_index=True)
    balance = models.DecimalField(verbose_name="账户余额", default=0, max_digits=10, decimal_places=2)
    level = models.ForeignKey(verbose_name="级别", to="Level", on_delete=models.CASCADE)
    create_date = models.DateTimeField(verbose_name="创建日期", auto_now_add=True)
    creator = models.ForeignKey(verbose_name="创建者", to="Administrator", on_delete=models.CASCADE)


class PricePolicy(models.Model):
    """ 价格策略(原价,后续可以根据用级别不同做不同折扣)
    1  1000 10
    2  2000 18
    """
    count = models.IntegerField(verbose_name="数量")
    price = models.DecimalField(verbose_name="价格", default=0, max_digits=10, decimal_places=2)


class Order(ActiveBaseModel):
    """ 订单表 """
    status_choices = (
        (1, "待执行"),
        (2, "正在执行"),
        (3, "已完成"),
        (4, "失败"),
    )
    status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=1)

    # 202211022123123123
    oid = models.CharField(verbose_name="订单号", max_length=64, unique=True)
    url = models.URLField(verbose_name="视频地址", db_index=True)
    count = models.IntegerField(verbose_name="数量")

    price = models.DecimalField(verbose_name="价格", default=0, max_digits=10, decimal_places=2)
    real_price = models.DecimalField(verbose_name="实际价格", default=0, max_digits=10, decimal_places=2)

    old_view_count = models.CharField(verbose_name="原播放量", max_length=32, default="0")

    create_datetime = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
    customer = models.ForeignKey(verbose_name="客户", to="Customer", on_delete=models.CASCADE)
    memo = models.TextField(verbose_name="备注", null=True, blank=True)


class TransactionRecord(ActiveBaseModel):
    """ 交易记录 """
    charge_type_class_mapping = {
        1: "success",
        2: "danger",
        3: "default",
        4: "info",
        5: "primary",
    }
    charge_type_choices = ((1, "充值"), (2, "扣款"), (3, "创建订单"), (4, "删除订单"), (5, "撤单"),)
    charge_type = models.SmallIntegerField(verbose_name="类型", choices=charge_type_choices)

    customer = models.ForeignKey(verbose_name="客户", to="Customer", on_delete=models.CASCADE)
    amount = models.DecimalField(verbose_name="金额", default=0, max_digits=10, decimal_places=2)

    creator = models.ForeignKey(verbose_name="管理员", to="Administrator", on_delete=models.CASCADE, null=True, blank=True)

    order_oid = models.CharField(verbose_name="订单号", max_length=64, null=True, blank=True, db_index=True)
    create_datetime = models.DateTimeField(verbose_name="交易时间", auto_now_add=True)
    memo = models.TextField(verbose_name="备注", null=True, blank=True)

最好在终端进行表的提交

python manage.py makemigrations

python manage.py migrate

img

标签:default,name,models,max,代码,订单,True,交易平台,verbose
From: https://www.cnblogs.com/Tmars/p/18448545

相关文章

  • 代码随想录算法训练营day4|● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个
    学习资料:https://programmercarl.com/0024.两两交换链表中的节点.html学习记录:24.两两交换链表中的节点(添加虚拟头节点;交换1、2节点和3、4节点时,要用1前面的cur,先保存1为temp且3保存为temp1,cur指向2,再把2指向temp,因为cur指向2后就与1没关联了)点击查看代码#Definitionforsi......
  • 代码随想录算法训练营 | 452. 用最少数量的箭引爆气球,435. 无重叠区间,763.划分字母区
    452.用最少数量的箭引爆气球题目链接:452.用最少数量的箭引爆气球文档讲解︰代码随想录(programmercarl.com)视频讲解︰452.用最少数量的箭引爆气球日期:2024-10-05想法:对气球起点排序,没有重叠的箭头+1,有重叠得话将右边置为最小的右边。Java代码如下:classSolution{publ......
  • 订单交易平台一
    简介:订单交易平台核心的功能模块:认证模块,用户名密码或手机短信登录(60s有效)。角色管理,不同角色具有不同权限和展示不同菜单。管理员,充值客户,下单客户管理,除了基本的增删改查以外,支持对客户可以分级,不同级别后续下单折扣不同。交易中心管理员可以给客户余......
  • 不同时间显示不同的广告代码
    <scripttype="text/javascript">varh=newDate().getHours();vart="";if(h>=7&&h<=13){t="<divclass='inde_t_ad'><ahref='http://example.com/'target='_blan......
  • 帝国CMS安装时出现You have an error in your SQL syntax错误代码的解决方法
    在安装EmpireCMS时遇到 YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMariaDBserverversionfortherightsyntaxtousenear'TYPE=MYISAM' 的错误,通常是由于数据库版本不兼容导致的。以下是详细的解决方法:1.选择正确的MySQL版......
  • 3.资源《Arduino UNO R3 proteus 电机测速仿真工程文件(含驱动代码)》说明。
     资源链接: ArduinoUNOR3proteus电机测速仿真工程文件(含驱动代码)1.文件明细:2.文件内容说明包含:proteus工程、原理图、仿真程序。3.内容展示4.简述该文件为Proteus工程。用于电机测速验证。5.演示视频proteus仿真电机测速......
  • 如何区分股票是沪深哪一个?知晓股票代码
    一般规则是:沪市(上海证券交易所):股票代码以60开头的股票属于沪市。例如,600519贵州茅台(600519.SH)。另外,沪市还有一部分科创板的股票,其代码是以68开头的。深市(深圳证券交易所):股票代码以00开头的股票属于深市主板或中小企业板,例如,000001平安银行(000001.SZ)。......
  • 欧拉筛解释(含C++代码)
    intprime[MAXN];//质数列表boolisPrime[MAXN];//标记是否为质数(0表示是,1表示不是)intcnt;//prime表长/*对于任意合数m,可写作m=p*k(p为m的最小质因子,k为m/p,m、k>1且为整数,k>p(p为最小质因子,k为其它几个质因子相乘,每个质因子都比p大,所以k>p))*///欧拉筛(使每个合数......
  • 《代码大全》阅读笔记1(2024.10.4)
    第一章:引言软件构建的艺术:介绍了软件开发的复杂性,以及编写高质量代码的重要性。强调了良好的编码习惯不仅能提高代码的可读性和可维护性,也能降低后期的开发成本。第二章:软件构建的哲学质量的重要性:讨论了软件质量的定义,强调高质量软件不仅包括功能的正确性,还包括可维护性、......
  • 代码源 2024 Day 7 ~ 9
    Day7/2024-10-02开T1,发现\(n\le16\),感觉是个状压DP状物,但是手玩了半天还不会,写了个\(30\)pts的爆搜。T2,感觉应该是有规律的,但是并没有细推,也没有打个表看看,最后只会\(5\)pts的BFS爆搜。T3,删边,似乎没有多少时间了,写了\(20\)pts的DFS爆搜。T4,邻域查询,感觉......