管理员功能

  1. 查询商品
  2. 设置商品数量
  3. 上下架商品
  4. 以及过去7天相应的报表
    查询下架商品

    商品下架前端代码`
<head>{% load static %}<meta charset="UTF-8"><title>查询/下架</title><style>.select{width:980px;height:50px;margin: 2px auto;overflow: hidden;}.content{width:980px;height:610px;margin: 2px auto;overflow: hidden;}.comm1{width:285px;height:48px;background-color: aliceblue;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.comm2{width:570px;height:48px;background-color: aliceblue;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.img1{width:580px;height:300px;background-color: beige;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.img2{width:380px;height:350px;background-color: aliceblue;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.reset{width:580px;height:50px;float: left;}.submit{width:980px;height:50px;float: left;}.select1{width: 290px; height: 48px;  font-size: 18px; color: black; background-color:aliceblue; outline: none;}.comm1 input { width: 480px; height: 48px;  font-size: 18px; color: black; background-color:aliceblue; outline: none;}.img2 input { width: 480px; height: 48px;  font-size: 18px; color: black; background-color:cornsilk; outline: none;}.reset button { width: 575px; height: 50px; border: 1px;  font-size: 15px; color: black; outline: none; cursor: pointer; background-color:cadetblue; }.submit button { width: 375px; height: 50px; border: 1px; font-size: 15px;  color: black; outline: none; cursor: pointer; background-color:cadetblue; }</style>
</head>
<body>
<form method="POST" action="/xiajia"><div class="select"><div class="comm1"><select name="comtype" class="select1"><option value="水果生鲜">水果生鲜</option><option value="日用百货">日用百货</option><option value="粮油米面">粮油米面</option><option value="洗护用品">洗护用品</option><option value="今日特价">今日特价</option></select></div><div class="comm1"><input  type="text" name="comname" autocomplete="off" placeholder="商品名称"></div><div class="comm1"><div class="submit"><button  type="submit" id="submit" name="submit">查询</button></div></div></div>
</form>
<form method="POST" action="/xiajiaf" enctype="multipart/form-data">
<div class="content"><div class="img1"><div class="comm2">编号:{{commodity.com_id}}</div><div class="comm2">类型:{{commodity.com_type}}</div><div class="comm2">名称:{{commodity.com_name}}</div><div class="comm2">剩余数量:{{commodity.com_num}}</div><div class="comm2">进价:{{commodity.com_inprice}}</div><div class="comm2">售价:{{commodity.com_outprice}}</div><div class="comm2">折扣:{{commodity.com_discount}}</div></div><div class="img2"><input type="text" name=com_name value="{{ commodity.com_name }}" hidden><div class="img3"><img src="/static/media/{{ commodity.com_img }}"></div></div><div class="submit"><button  type="submit" id="submit" name="submit">下架</button></div>
</div></form>
</body>
</html>

查询修改商品

*查询修改商品信息前端代码

<head>{% load static %}<meta charset="UTF-8"><title>查询/修改商品信息</title><style>.select{width:980px;height:50px;margin: 2px auto;overflow: hidden;}.content{width:980px;height:610px;margin: 2px auto;overflow: hidden;}.comm1{width:285px;height:48px;background-color: aliceblue;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.comm2{width:285px;height:48px;background-color: aliceblue;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.img1{width:580px;height:300px;background-color: beige;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.img2{width:380px;height:350px;background-color: aliceblue;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.reset{width:580px;height:50px;float: left;}.submit{width:380px;height:50px;float: left;}.select1{width: 290px; height: 48px;  font-size: 18px; color: black; background-color:aliceblue; outline: none;}.comm1 input { width: 480px; height: 48px;  font-size: 18px; color: black; background-color:aliceblue; outline: none;}.img2 input { width: 480px; height: 48px;  font-size: 18px; color: black; background-color:cornsilk; outline: none;}.reset button { width: 575px; height: 50px; border: 1px;  font-size: 15px; color: black; outline: none; cursor: pointer; background-color:cadetblue; }.submit button { width: 375px; height: 50px; border: 1px; font-size: 15px;  color: black; outline: none; cursor: pointer; background-color:cadetblue; }</style>
</head>
<body>
<form method="POST" action="/QueryModity"><div class="select"><div class="comm1"><select name="comtype" class="select1"><option value="水果生鲜">水果生鲜</option><option value="日用百货">日用百货</option><option value="粮油米面">粮油米面</option><option value="洗护用品">洗护用品</option><option value="今日特价">今日特价</option></select></div><div class="comm1"><input  type="text" name="comname" autocomplete="off" placeholder="商品名称"></div><div class="comm1"><div class="submit"><button  type="submit" id="submit" name="submit">查询</button></div></div></div>
</form>
<form method="POST" action="/QueryModityf" enctype="multipart/form-data">
<div class="content"><div class="img1"><div class="comm2">编号:{{commodity.com_id}}</div><div class="comm1"><input name="com_id"  value="{{ commodity.com_id }}" id="com_type" type="text" autocomplete="off" placeholder="商品编号修改为"></div><div class="comm2">类型:{{commodity.com_type}}</div><div class="comm1"><select name="com_type" class="select1"><option value="水果生鲜">水果生鲜</option><option value="日用百货">日用百货</option><option value="粮油米面">粮油米面</option><option value="牛奶饮料">牛奶饮料</option><option value="洗护用品">洗护用品</option><option value="今日特价">今日特价</option></select></div><div class="comm2">名称:{{commodity.com_name}}</div><div class="comm1"><input name="com_name" id="com_name" type="text" autocomplete="off" placeholder="商品名称修改为"></div><div class="comm2">剩余数量:{{commodity.com_num}}</div><div class="comm1"><input name="com_num"  id="com_num" type="text" autocomplete="off" placeholder="补货"></div><div class="comm2">进价:{{commodity.com_inprice}}</div><div class="comm1"><input name="com_inprice"  id="com_inprice" type="text" autocomplete="off" placeholder="商品进价修改为"></div><div class="comm2">售价:{{commodity.com_outprice}}</div><div class="comm1"><input name="com_outprice"  id="com_outprice" type="text" autocomplete="off" placeholder="商品售价修改为"></div><div class="comm2">折扣:{{commodity.com_discount}}</div><div class="comm1"><input name="com_discount"  id="com_discount" type="text" autocomplete="off" placeholder="商品折扣修改为"></div></div><div class="img2"><input name="com_img"  id="com_img" type="file" accept="image/*" autocomplete="off" placeholder="商品图片"><div class="img3"><img src="/static/media/{{ commodity.com_img }}"></div></div><div class="reset"><button  type="reset" id="submit" name="submit">重置</button></div><div class="submit"><button  type="submit" id="submit" name="submit">修改</button></div>
</div></form>
</body>
</html>

上架商品

上架前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>商品上架</title><style>.content{width:980px;height:600px;margin: 2px auto;overflow: hidden;}.comm{width:480px;height:48px;background-color: beige;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.img1{width:480px;height:350px;background-color: beige;float: left;border-color: #f5f487;border-width: 1px;border-style: solid;}.reset{width:480px;height:50px;float: left;}.submit{width:480px;height:50px;float: left;}.select{width: 480px; height: 48px;  font-size: 18px; color: black; background-color:cornsilk; outline: none;}.comm input { width: 480px; height: 48px;  font-size: 18px; color: black; background-color:cornsilk; outline: none;}.img1 input { width: 480px; height: 48px;  font-size: 18px; color: black; background-color:cornsilk; outline: none;}.reset button { width: 475px; height: 50px; border: 1px;  font-size: 15px; color: black; outline: none; cursor: pointer; background-color:cadetblue; }.submit button { width: 475px; height: 50px; border: 1px; font-size: 15px;  color: black; outline: none; cursor: pointer; background-color:cadetblue; }</style>
</head>
<body>
<form method="POST" action="/GoodsShelvesf" enctype="multipart/form-data">
<div class="content"><div class="img1"><div class="comm"><input name="com_id" id="com_id" type="text" autocomplete="off" placeholder="商品编号"></div><div class="comm"><select name="com_type" class="select"><option value="水果生鲜">水果生鲜</option><option value="日用百货">日用百货</option><option value="粮油米面">粮油米面</option><option value="牛奶饮料">牛奶饮料</option><option value="洗护用品">洗护用品</option><option value="今日特价">今日特价</option></select></div><div class="comm"><input name="com_name"  id="com_name" type="text" autocomplete="off" placeholder="商品名称"></div><div class="comm"><input name="com_num"  id="com_num" type="text" autocomplete="off" placeholder="商品数量"></div><div class="comm"><input name="com_inprice"  id="com_inprice" type="text" autocomplete="off" placeholder="商品进价"></div><div class="comm"><input name="com_outprice"  id="com_price" type="text" autocomplete="off" placeholder="商品售价"></div><div class="comm"><input name="com_discount"  id="com_discount" type="text" autocomplete="off" placeholder="商品折扣"></div></div><div class="img1"><input name="com_img"  id="com_img" type="file" accept="image/*"  autocomplete="off" placeholder="商品图片"/></div><div class="reset"><button  type="reset" id="submit" name="submit">重置</button></div><div class="submit"><button  type="submit" id="submit" name="submit">上架</button></div>
</div></form>
</body>
</html>

数据报表

数据报表是使用Python的matplotlib第三方库实现的故没有前端代码

接下来是全部的后端代码

import refrom django.shortcuts import render, render_to_response,redirect
from time import strftime
import datetime
from untitled4 import settings
from .models import commodity,offtake
import plotly as py
import plotly.graph_objs as godef GoodsShelves(request):#进上架商品页面if request.method == 'GET':return render(request, 'Goods_Shelves.html')def xiajia(request):#进下架商品页面if request.method == 'GET':return render(request, 'xiajia.html')def QueryModity(request):#进查询修改商品页面if request.method == 'GET':return render(request, 'QueryModity.html')if request.method=='POST':data=request.POSTtry:commodit=commodity.objects.get(com_type=data.get('comtype'),com_name=data.get('comname'))return render(request,'QueryModity.html',{'commodity':commodit})except:return render(request, 'QueryModity.html')def queryxiajia(request):#进下架查询页面if request.method == 'GET':return render(request, 'xiajia.html')if request.method=='POST':data=request.POSTtry:commodit=commodity.objects.get(com_type=data.get('comtype'),com_name=data.get('comname'))return render(request,'xiajia.html',{'commodity':commodit})except:return render(request, 'xiajia.html')
def GoodsShelvesfun(request):#上架商品方法if request.method=='POST':data =request.POSTimg = request.FILES['com_img']if data:com_id=data.get('com_id')#print(com_id)com_type = data.get('com_type')#print(com_type)com_name= data.get('com_name')com_num=data.get('com_num')com_inprice = data.get('com_inprice')com_outprice=data.get('com_outprice')com_discount=data.get('com_discount')imgdi='img1'+'/'+data.get('com_type')+'/' + img.namefname = settings.MEDIA_ROOT +'/'+'img1'+'/'+data.get('com_type')+'/' + img.name#print(fname)with open(fname, 'wb') as pic:for c in img.chunks():pic.write(c)try:commodity.objects.create(com_id=com_id,com_type=com_type,com_name=com_name,com_num=com_num,com_inprice=com_inprice,com_outprice=com_outprice,com_discount=com_discount,com_img=imgdi)#print('上架成功,继续上架!')return render(request,'Goods_Shelves.html')except:#print('上架失败!')return render(request,'Goods_Shelves.html')def QueryModityfun(request):#查询、修改商品方法if request.method=='POST':data =request.POSTimg = request.FILES['com_img']if data:comid=data.get('com_id')#print(comid)comtype = data.get('com_type')#print(comtype)comname= data.get('com_name')comnum=data.get('com_num')cominprice = data.get('com_inprice')comoutprice=data.get('com_outprice')comdiscount=data.get('com_discount')try:com=commodity.objects.get(com_id=comid)if com.com_type != comtype:com.com_type=comtypeif com.com_name != comname:com.com_name=comnameif com.com_num != comnum:com.com_num = comnumif com.com_inprice != cominprice:com.com_inprice = cominpriceif com.com_outprice != comoutprice:com.com_outprice = comoutpriceif com.com_discount!=comdiscount:com.com_discount=comdiscountimg1 = 'img1' + '/' + data.get('com_type') + '/' + img.namefname = settings.MEDIA_ROOT + '/' + 'img1' + '/' + data.get('com_type') + '/' + img.name#print(fname)with open(fname, 'wb') as pic:for c in img.chunks():pic.write(c)if com.com_img!=img1:com.com_img=img1com.save()#保存修改#print('修改成功!')return redirect('/QueryModity')except:return redirect('/QueryModity')def xiajiafun(request):if request.method == 'POST':data = request.POST#print(data)if data:comname = data.get('com_name')print(comname)try:commodity.objects.filter(com_name= comname).delete()# print('修改成功!')return redirect('/xiajia')except:return redirect('/xiajia')def drawpicture(request):#数据报表方法,需要显示各个商品售出数量,以及各个商品盈利,以每周每月为一个簇if request.method=="GET":list3 = []#print((datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d'))for j in commodity.objects.all():list2 = []x=eval(re.findall('\d+', j.com_outprice)[0])-eval(re.findall('\d+', j.com_inprice)[0])for i in range(7):list4=[]list1 = offtake.objects.filter(comm1=j.com_name,timenow=(datetime.datetime.now() - datetime.timedelta(days=i)).strftime('%Y-%m-%d')).first()if list1 != None:#print(list1.comm1)num=re.findall('\d+',list1.num)list4.insert(0,list1.comm1)list4.insert(1,num[0])list4.insert(2,str(x*eval(num[0])))list2.insert(i, list4)else:continueif list2!=None:list3.append(list2)else:continueprint(list3)i=0list5=[]list6=[]list7=[]list8=[]for li in list3:if li==[]:continueelse:for j in range(len(li)):if li[j][0] not in list5:list5.insert(i,li[j][0])list6.insert(i,int(li[j][1]))list7.insert(i,int(li[j][2]))i+=1else:x=list5.index(li[j][0])list6[x]=list6[x]+int(li[j][1])list7[x]=list7[x]+int(li[j][2])h=0for i in range(len(list7)):h += list7[i]for i in range(len(list5)):commodi=commodity.objects.get(com_name=list5[i])g=re.findall('\d+',commodi.com_num)list8.insert(i,int(g[0]))list5.append("总盈利")list7.append(h)trace_1= go.Bar(x=list5,y=list6,name="销售量")trace_2=go.Bar(x=list5,y=list7,name="盈利(元)")trace_3=go.Bar(x=list5,y=list8,name="库存")trace = [trace_1, trace_2,trace_3]# Layoutlayout = go.Layout(title='过去七天')# Figurefigure = go.Figure(data=trace, layout=layout)py.offline.plot(figure, filename="./myapp/templates/seedraw.html")return render(request,'seedraw.html')if request.method=="POST":timeweek=[]list3=[]for j in commodity.objects.all():list2 = []for i in range(7):list1=offtake.objects.filter(comm1=j.com_num,timenow=(datetime.datetime.now()-datetime.timedelta(days=i)).strftime('%Y-%m-%d'))if list1!=None:list2.insert(i,list1)else:continuelist3.append(list2)print(list3)#pyplt = py.offline.plot**还有个重要文件就是建立数据库的相关文件**`
这个就是调数据库问题的,顺便给出我的数据库图片吧
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200510214135488.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01FRE9VRE9V,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200510214241605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01FRE9VRE9V,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/2020051021430563.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01FRE9VRE9V,size_16,color_FFFFFF,t_70)这是跟数据库相关的代码
```python
from django.db import migrations, modelsclass Migration(migrations.Migration):initial = Truedependencies = []operations = [migrations.CreateModel(name='adminstor',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('uname', models.CharField(max_length=15)),('upassword', models.CharField(max_length=18)),],options={'db_table': 'adminstor',},),migrations.CreateModel(name='commodity',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('com_id', models.CharField(default='', max_length=6)),('com_type', models.CharField(default='', max_length=15)),('com_name', models.CharField(max_length=30)),('com_img', models.ImageField(upload_to='img1')),('com_num', models.CharField(max_length=15)),('com_inprice', models.CharField(default='', max_length=20)),('com_outprice', models.CharField(default='', max_length=15)),('com_discount', models.CharField(default='', max_length=15)),],options={'db_table': 'commodity_details',},),migrations.CreateModel(name='ident',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('u_name', models.CharField(max_length=18)),('edcom1', models.CharField(max_length=255)),('edcom2', models.CharField(max_length=255)),('edcom3', models.CharField(max_length=255)),('edcom4', models.CharField(max_length=255)),('edcom5', models.CharField(max_length=255)),('edcom6', models.CharField(max_length=255)),('edcom7', models.CharField(max_length=255)),],options={'db_table': 'ident',},),migrations.CreateModel(name='offtake',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('timenow', models.CharField(default='', max_length=30)),('comm1', models.CharField(default='', max_length=5000)),('comm2', models.CharField(default='', max_length=5000)),],options={'db_table': 'offtake',},),migrations.CreateModel(name='user',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('u_name', models.CharField(max_length=15)),('u_password', models.CharField(max_length=18)),('u_tellphone', models.CharField(max_length=15)),],options={'db_table': 'user',},),migrations.CreateModel(name='usershopcar',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('u_name', models.CharField(max_length=18)),('com1', models.CharField(max_length=18)),('num1', models.CharField(max_length=4)),('com2', models.CharField(max_length=18)),('num2', models.CharField(max_length=4)),('com3', models.CharField(max_length=18)),('num3', models.CharField(max_length=4)),('com4', models.CharField(max_length=18)),('num4', models.CharField(max_length=4)),('com5', models.CharField(max_length=18)),('num5', models.CharField(max_length=4)),('com6', models.CharField(max_length=18)),('num6', models.CharField(max_length=4)),('com7', models.CharField(max_length=18)),('num7', models.CharField(max_length=4)),],options={'db_table': 'usershopcar',},),]

这是本人大三年级做的,时间过去许久,已将忘了大部分。抱歉只能贴码了
本文原创

Python Django项目实例二相关推荐

  1. python django项目实例_最新Django项目实战-从零开发NB的任务平台python视频学习教程...

    saas导学视频 .mp4 │ 模态框.zip │ ├─day01 │ │ 01 day01 sass项目介绍 .mp4 │ │ 02 day01 sass项目演示 .mp4 │ │ 04 day01 ...

  2. python django项目实例_【Django】项目实例

    Django框架 [简介]:Python下有许多款不同的 Web 框架,Django是重量级的web框架中最有代表性的框架之一. 下面介绍使用Pycharm图形化界面创建 Django项目 . 一.创 ...

  3. python路由编程_Python Django基础二之URL路由系统

    MVC和MTV框架 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务 ...

  4. Python Django(一)—— Django 简介、安装、创建第一个项目

    Django 是由 Python 编写的一个开源 Web 应用框架,Python + Django 是快速开发.设计.部署网站的最佳组合. Django 版本与 Python 环境的对应表如下,建议对 ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. liunx+python+django框架实现图片生成二维码

    点击箭头处"蓝色字",免费领测试技术及面试资料! 余生皆欢喜 liunx+python+django框架实现二维码生成器 首先我简单的介绍下django:django官网解释就是如 ...

  7. python开发之Django(二)

    python开发之Django(二) 一.ORM 1. ORM基础 2. Django ORM语法 2.1 表(模型)的创建: 2.2 表的操作 2.2.1 增删改查 2.2.2 对象查询,单表条件查 ...

  8. 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

    利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcodeqr = q ...

  9. Python+Django+Ansible Playbook自动化运维项目实战(二)

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  10. Python Django 学习 (二) 【Django 模型】

    注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...

最新文章

  1. IntelliJ 中设置与Eclipse中 Ctrl+1 功能类似的快捷键
  2. MySQL中有关TIMESTAMP和DATETIME的总结
  3. Linux基础命令--date
  4. Python元组与列表
  5. go 求两个时间相差的天数
  6. as cast float server sql_Sql Server中Float格式转换字符串varchar方法(转)
  7. debug模式不报错,release模式报错
  8. thinkphp框架环境部署
  9. 我要自学编程,Java和C语言相比哪个好?
  10. html如何创建二级标题,这样二级标题就产生了; 步骤四:同理三级标题就在二级标题下创建...
  11. 绿色IT十大攻略:营建企业绿色IT环境
  12. php日历备忘记事本,一个比较不错的PHP日历类分享
  13. Linux 云服务器的使用
  14. 关于app store distribution出现的'armv7'与最小版本'3.0'不兼容的问题
  15. 打牌软件可以控制吗_手机打牌软件到底有没有外挂?
  16. RHEL8 新特性和安装方法
  17. 动态规划:矩阵连乘问题
  18. ciso 调试_混乱工程对CISO必不可少的5个原因
  19. 全网最全的Qt下载途径(多种下载通道+所有版本)
  20. 大连计算机软件培训,大连计算机办公技能培训

热门文章

  1. keil4 破解心得
  2. python自编中值滤波器
  3. 《寄生虫》横扫奥斯卡,Python告诉你这部电影到底好在哪里?
  4. http请求中关于SSL server certificate验证的trace细节
  5. 计算机机房中使用ups的作用是什么,机房监控UPS的作用是什么?你可知道?
  6. Word2016--显示/隐藏书签、批量删除书签
  7. 2048小游戏最佳算法C语言,2048游戏的最佳算法是什么?
  8. webstorm中文版修改
  9. Quartus II破解出现的问题
  10. 计算机主机前声音口怎么设置吗,电脑耳机没声音怎么设置_耳机没声音怎么设置-太平洋IT百科手机版...