亲手教你如何搭建一个基金模拟系统(基于Django框架)

第一步:创建项目、APP以及静态文件存储文件夹

django-admin startproject Chongyang
django-admin startapp Stock    # Chongyang文件夹里面操作
在chongyang项目创建statics和templates两个文件夹

第二步:配置Setting.py文件

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','Stock'       # 添加自己的APP名
]   TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],  # 静态文件夹地址(必须配置)'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]# 数据库配置(使用默认sqlite)
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),'NAME': os.path.join(BASE_DIR, 'StockDB.db'),}}LANGUAGE_CODE = 'zh-hans'      # 汉语
TIME_ZONE = 'Asia/Shanghai'    # 时区STATIC_URL = '/static/'         # 静态文件配置
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'statics'),        # 具体的路径os.path.join(BASE_DIR, 'templates'),
]

第三步:运行项目

python manage.py runserver 0.0.0.0:8000

到目前为止,你已经创建了一个拥有极其庞大功能的web网站,后续只需激活相应的服务即可

  • url.py # 路由配置文件
  • views.py # 功能实现文件
  • admin.py # 后台管理文件
  • model.py # 数据库创建文件

第四步:具体项目配置

在配置好前面设置后直接在相应的文件里复制如下代码运行项目即可

1、models.py
from django.db import models
import uuid# 基金经理数据表
class Fund_Manger(models.Model):name = models.CharField(max_length=20)age = models.IntegerField()entry_time = models.CharField(max_length=20)def __str__(self):return self.name# 股票信息数据表
class Stock(models.Model):stock_name = models.CharField(max_length=20)code = models.CharField(max_length=10)def __str__(self):return self.code# 交易系统表
class Trading(models.Model):name = models.CharField(max_length=20)time = models.DateTimeField()code = models.CharField(max_length=10)number = models.IntegerField()price = models.CharField(max_length=10)operate = models.CharField(max_length=10)total_price = models.CharField(max_length=20)# 清算数据表
class Fund_pool(models.Model):time = models.DateTimeField()total_pool = models.CharField(max_length=30)oprate_people = models.CharField(max_length=10)people_num = models.IntegerField()def __str__(self):return self.total_pool
2、url.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from Stock import viewsurlpatterns = [path('admin/', admin.site.urls),url(r'^$', views.index),url(r'^data_entry/$', views.data_entry, name='data_entry'),url(r'^add_fund_manger/$', views.add_fund_manger),url(r'^add_stock/$', views.add_stock),url(r'^check$', views.check_index, name='check'),url(r'^trading/$', views.check),url(r'^trading_success/$', views.trading),url(r'^fund_pool/$', views.Fund_pool_, name='fund_pool'),url(r'^account/$', views.Account)
]
3、views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.utils import timezone
from Stock.models import Fund_Manger, Stock, Trading, Fund_pool
import redef index(request):return render(request, 'index.html')def data_entry(request):return render(request, 'data_entry.html')def check_index(request):return render(request, 'check.html')def add_fund_manger(request):'''添加时需判断原始表是否已经存在此用户信息同时添加年龄限制(20~40)'''if request.method == "POST":name = request.POST['name']age = request.POST['age']entry_time = request.POST['Time']check_name = Fund_Manger.objects.filter(name=name)if check_name:return HttpResponse("<center><h1>该用户已处在!</h1></center>")else:if int(age) < 20 or int(age) >= 40:return HttpResponse("<center><h1>该用户年龄不符合要求!</h1></center>")else:Mas = Fund_Manger(name=name, age=age, entry_time=entry_time)Mas.save()return HttpResponse("<center><h1>用户注册成功!</h1></center>")def add_stock(request):'''添加基金池数据时需对股票代码做限定仅限A股市场,同时做异常捕获处理'''if request.method == "POST":stock_name = request.POST['stock_name']post_code = request.POST['code']# 过滤交易代码(以0、3、6开头长度为6的数字)pattern = re.compile(r'000[\d+]{3}$|^002[\d+]{3}$|^300[\d+]{3}$|^600[\d+]{3}$|^601[\d+]{3}$|^603[\d+]{3}$')code = pattern.findall(post_code)# 异常处理try:num = code[0].__len__()if num == 6:Mas = Stock(stock_name=stock_name, code=code[0])Mas.save()return HttpResponse("<center><h1>基金池数据添加成功!</h1></center>")else:return HttpResponse("<center><h1>错误代码!</h1></center>")except Exception as e:return HttpResponse("<center><h1>错误代码!</h1></center>")def check(request):'''信息合规查询(仅限A股数据)需对基金经理、股票代码、交易数量同时做判断'''if request.method == "POST":name = request.POST['name']code = request.POST['code']number = request.POST['number']# 基金经理信息过滤try:check_name = Fund_Manger.objects.filter(name=name)if check_name:# 基金池数据过滤try:check_code = Stock.objects.filter(code=code)# 交易数量过滤if check_code:if int(number) % 100 == 0:return render(request, 'trade_index.html', {"name": name, "code": code, "number": number})else:return HttpResponse('<center><h1>交易数量填写错误!</h1></center>')else:return HttpResponse('<center><h1>基金池无该股票信息!</h1></center>')except Exception as e:print('异常信息为:%s' % str(e))passelse:return HttpResponse('<center><h1>没有该基金经理!</h1></center>')except Exception as e:print('异常信息为:%s' % str(e))passdef trading(request):'''按照操作进行划分(买入卖出)若买入只需判断交易金额与剩余现金资产对比即可若卖出还需对其持股数量加以判断'''if request.method == "POST":name = request.POST['name']code = request.POST['code']number = request.POST['number']price = request.POST['price']operate = request.POST['operate']# 获取剩余可用资金try:total_price = float(Trading.objects.all().order_by('-time')[0].total_price)except Exception as e:total_price = 1000000if operate == '卖出':# 获取此股票持仓数量stock_nums = Trading.objects.filter(code=code)stock_num = sum([i.number for i in stock_nums])number = -int(number)if abs(number) <= stock_num:# 计算交易所需金额trade_price = float(price) * int(number)balance = total_price - trade_priceTime_ = timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S")Mas = Trading(name=name, time=Time_, code=code, number=number, price=price, operate=operate,total_price=balance)Mas.save()return HttpResponse("<center><h1>交易完成!</h1></center>")else:return HttpResponse("<center><h1>持仓数小于卖出数,无法交易!</h1></center>")elif operate == '买入':trade_price = float(price) * int(number)balance = total_price - trade_priceTime_ = timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S")if trade_price <= total_price:Mas = Trading(name=name, time=Time_, code=code, number=number, price=price, operate=operate, total_price=balance)Mas.save()print(total_price)return HttpResponse("<center><h1>交易完成!</h1></center>")else:print(total_price)return HttpResponse("<center><h1>资金总额不足!</h1></center>")else:return HttpResponse("<center><h1>无效指令!</h1></center>")def Fund_pool_(request):return render(request, 'fund_pool.html')def Account(request):'''清算只需查询操作人是否为基金经理即可'''if request.method == "POST":name = request.POST['name']# 基金经理信息check_name = Fund_Manger.objects.filter(name=name)# 基金操作人数统计oprate_people = Trading.objects.all()if check_name:total_price = float(Trading.objects.all().order_by('-time')[0].total_price)total_pool = '¥ ' + str(total_price)oprate_people_num = set([stock_name.name for stock_name in oprate_people]).__len__()Time_ = timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S")Mas = Fund_pool(time=Time_, total_pool=total_pool, oprate_people=name, people_num=oprate_people_num)Mas.save()return HttpResponse("<center><h1>数据清算成功!</h1></center>")else:return HttpResponse('<center><h1>非法操作!</h1></center>')
4、admin.py
from django.contrib import admin
from Stock.models import Fund_Manger, Stock, Trading, Fund_pool# Register your models here.
class Fund_MangerAdmin(admin.ModelAdmin):list_display = ('name', 'age', 'entry_time')class StockAdmin(admin.ModelAdmin):list_display = ('stock_name', 'code')class TradingAdmin(admin.ModelAdmin):list_display = ('name', 'time', 'code', 'number', 'price', 'operate', 'total_price')class Fund_PoolAdmin(admin.ModelAdmin):list_display = ('time', 'total_pool', 'oprate_people', 'people_num')admin.site.register(Fund_Manger, Fund_MangerAdmin)
admin.site.register(Stock, StockAdmin)
admin.site.register(Trading, TradingAdmin)
admin.site.register(Fund_pool, Fund_PoolAdmin)

第五步:在templates文件夹下面创建业务页面

1、index.html
<!DOCTYPE html>
<html lang="en">
<head>
{#    <meta http-equiv="refresh" content="3;URL=data_entry/">#}<meta charset="UTF-8"><title>首页</title>
<style>a{ font-size:25px; color: white}li{ color: white; font-size: 30px}
</style></head>
<body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;"><center><br/><div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"><img src="../static/images/logo.jpg" width="245" height="100"><h2 style="color: white; size: 10px">基金模拟系统:</h2><li><a href="{% url 'data_entry' %}">数据录入系统</a></li><li><a href="{% url 'check' %}" aria-setsize="10px">合规管理系统</a></li><li><a href="{% url 'fund_pool' %}">尾盘清算系统</a></li></div>
</center></body>
</html>
2、check.html
<!DOCTYPE html>
<html>
<head>
<title>合规查询系统</title>
</head>
<body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;">
<center><br/><div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"><img src="../static/images/logo.jpg" width="245" height="100"><h2 style="color: white; size: 10px">合规查询系统:</h2><form action="/trading/" method="POST">{% csrf_token %}<label style="color: white; size: 10px">姓&nbsp;&nbsp;&nbsp;名: </label><input type="text" name="name"> <br><label style="color: white; size: 10px">代&nbsp;&nbsp;&nbsp;码: </label><input type="text" name="code"> <br><label style="color: white; size: 10px">数&nbsp;&nbsp;&nbsp;量: </label><input type="text" name="number"> <br><br><input type="submit" type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提    交"></form></div>
</center>
</body>
</html>
3、data_entry.html
<!DOCTYPE html>
<html>
<head>
<title>数据录入系统</title>
</head>
<body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;"><center><div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 700px; height: 400px; margin:auto;"><h1 style="color: white; size: 10px">重阳投资</h1><h4 style="color: white; size: 10px">基金交易职员信息录入系统:</h4><form action="/add_fund_manger/" method="post">{% csrf_token %}<label style="color: white; size: 10px">姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名: </label><input type="text" name="name"> <br><label style="color: white; size: 10px">年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;龄: </label><input type="text" name="age"> <br><label style="color: white; size: 10px">入职时间: </label><input type="text" name="Time"> <br><br><input type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提    交"></form><h4 style="color: white; size: 10px">基金池信息录入系统:</h4><form action="/add_stock/" method="post">{% csrf_token %}<label style="color: white; size: 10px">股票简称: </label><input type="text" name="stock_name"> <br><label style="color: white; size: 10px">代&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码: </label><input type="text" name="code"> <br><br><input type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提    交"></form></div>
</center>
</body>
</html>
4、trade_index.html
<!DOCTYPE html>
<html>
<head>
<title>交易系统</title>
</head>
<body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 250%;overflow: hidden;">
<center><div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"><h1 style="color: white; size: 10px">重阳投资</h1><h2 style="color: white; size: 10px">交易系统:</h2><form action="/trading_success/" method="POST">{% csrf_token %}<label style="color: white; size: 10px">姓&nbsp;&nbsp;&nbsp;名: </label><input type="text" name="name" value={{ name }} readonly="readonly" /> <br><label style="color: white; size: 10px">代&nbsp;&nbsp;&nbsp;码: </label><input type="text" name="code" value={{ code }} readonly="readonly" /> <br><label style="color: white; size: 10px">数&nbsp;&nbsp;&nbsp;量: </label><input type="text" name="number" value={{ number }} readonly="readonly" /> <br><label style="color: white; size: 10px">价&nbsp;&nbsp;&nbsp;格: </label><input type="text" name="price"> <br><label style="color: white; size: 10px">操&nbsp;&nbsp;&nbsp;作: </label><input type="text" name="operate"> <br><br><input type="submit" type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="提    交"></form></div>
</center>
</body>
</html>
5、fund_pool.html
<!DOCTYPE html>
<html>
<head>
<title>基金清算系统</title>
</head>
<body style="background:url('../static/images/background.jpg') no-repeat fixed top; background-size: 100% 180%;overflow: hidden;">
<center><br><div style="position:fixed;left:0;right:0;top:0;bottom:0;width: 500px; height: 400px; margin:auto;"><h1 style="color: white; size: 10px">重阳投资</h1><h4 style="color: white; size: 10px">基金清算系统:</h4><form action="/account/" method="post">{% csrf_token %}<label style="color: white; size: 10px">姓&nbsp;&nbsp;名: </label><input type="text" name="name"> <br><br><input type="submit" style="width: 80px;height: 30px;border-radius: 7px;" value="清    算"></form></div>
</center>
</body>
</html>

第六步:创建表结构,创建超级管理员,运行项目即可

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver 0.0.0.0:8000

以上内容只是自己学习Django的一点总结分享,有不足的地方欢迎大家指导学习,一起进步。

教你亲手用Django搭建一个基金模拟交易系统相关推荐

  1. python怎么编写模拟交易_使用Django搭建一个基金模拟交易系统教程

    亲手教你如何搭建一个基金模拟系统(基于Django框架) 第一步:创建项目.APP以及静态文件存储文件夹 django-admin startproject Chongyang django-admi ...

  2. 1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

    在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作: 所有路由不能全部都在myDjango下的urls.py路由文件中, ...

  3. 手把手教你从0开始搭建一个vue项目(完结)

    前言 上一节webpack实战之(手把手教你从0开始搭建一个vue项目)最后我们完成了css样式的配置: webpack.config.js: const path = require("p ...

  4. 10分钟利用django搭建一个博客

    以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...

  5. 手把手教你利用开源项目搭建一个属于自已的电商平台

    我们知道想要搭建一个页面优美,功能完善,支持全面(app,web,小程序)的电商平台所投入的人力,物力以及成本不计其数,作为一家刚刚起步或技术不够成熟,没有稳定架构的中小型企业,如何在短时间内,完成一 ...

  6. 手把手教你用 30 分钟搭建一个网盘

    code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 本文出处:码匠笔记公众号 Pandownload 下线大家心里都很苦,不过我们还是的重新站起来,于是我研究了一下花了 ...

  7. 神探Sherlock如何用AI破案?教你在Excel中搭建一个人脸识别CNN网络

    作者 | Dave Smith 译者 | 刘畅 编辑 | 阿司匹林.Jane 出品 | AI科技大本营 [导读]人脸识别技术已经有了非常广泛的应用,国内大规模监控系统背后运用的技术就是人脸识别. 与大 ...

  8. 使用Django搭建一个bolg(精简版)NO.1

    本人根据相关教程搭建了一个bolg,内容中就不写那么详细了,适合搭建过,但忘记步骤的朋友使用: 首先进入一个目录 运行 pip3 install virtualenv 进行虚拟目录程序安装 运行 vi ...

  9. 1-2.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之二

    七.在项目下新建 templates 路径 在工程上,右键,添加templates目录 注意*: 此目录下即用来存放我们的html文件: 此目录一般是与app的主目录是平级的.当然也可以建立在app的 ...

最新文章

  1. 转 spring配置文件
  2. 华为腾讯百度众安微众360大咖齐聚,2019中国区块链开发者大会首批议程曝光!...
  3. Centos6.5配置DNS的主从服务器
  4. 浙江高考艺术类2021年成绩查询,2021年浙江美术高考成绩查询网址:https://www.zjzs.net/...
  5. PHP的urlencode
  6. springcloud Feign工程熔断器Hystrix
  7. 500错误无法为jsp编译类:_JSP(Java Server Pages)的相关使用
  8. 快捷笔记应用Side Notes Mac
  9. 软件测试工程师简历模板(三年经验)
  10. 笔记本怎么打开html的面板,联想笔记本控制面板在哪里打开
  11. 段地址寄存器、偏移地址寄存器
  12. 关于Cfree5.0编译的常见问题和使用教程
  13. 6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统 yaffs2烧录 图片显示烧录状态
  14. 简支梁挠度计算公式推导_简支梁的最大挠度计算公式 l.ppt
  15. cesium添加天地图,从环境配置到加载天地图
  16. Java对接谷歌身份验证器
  17. R语言基础题及答案(二)——R语言与统计分析第二章课后习题(汤银才)
  18. speedoffice使用方法-Word如何分栏
  19. ctf中linux 内核态的漏洞挖掘与利用系列
  20. go get connectex: A connection attempt failed because the connected party did not properly respond

热门文章

  1. csdn里面的问答如何手动结题(自己提的问题)
  2. hdu6599 I Love Palindrome String
  3. Unfiltered Audio Plugins Bundle for Mac(音频插件包)附破解教程 v2.0.0激活版
  4. 做网站云服务器装系统,云服务器安装win系统做网站
  5. 2020年3GPP技术将达到LPWA连接的35%
  6. EXCEL函数定位到最后一行
  7. Android 动画标签——scale
  8. 什么是云工作未来程序员的办公模式
  9. 父进程中getpid()值与子进程中getppid()值不相同的问题及解释
  10. 保存计算过程的计算器Java实现