# Order-WechatMini
#后端
##Cart- 购物车
###View.py-控制器层
```python
import json
from django.http import HttpResponse
from django.shortcuts import render
from django.utils.safestring import mark_safe
from . import redis
def index(request):
return render(request, 'Cart/index.html', {})
def room(request, room_name):
return render(request, 'Cart/room.html', {
'room_name_json': mark_safe(json.dumps(room_name))
})
def add_menu(request, desk):
detail = redis.creat_detail(desk, request.POST.get('name'), str(request.POST.get('num')))
redis.set_cache(detail)
return HttpResponse()
def del_menu(request, desk):
detail = redis.creat_detail(desk, request.POST.get('name'), str(request.POST.get('num')))
redis.del_cache(detail)
return HttpResponse()
def clean_menu(request, desk):
redis.clean_cache(desk)
return HttpResponse()
def get_menu(request, desk):
return HttpResponse(redis.get_cache(desk))
```
###consumers.py websocket 加减商品到购物车
```python
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
import json
from . import redis
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat_%s' % self.room_name
# Join room group
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
# Leave room group
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
cache_list = json.loads(message)
desk = int(self.scope['url_route']['kwargs']['room_name'])
# 处理请求
if cache_list['action'] == "+":
redis.set_cache(cache_list['detail'])
if cache_list['action'] == "-":
redis.del_cache(cache_list['detail'])
if cache_list['action'] == "*":
redis.clean_cache(desk)
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': redis.get_cache(desk)
}
)
# Receive message from room group
def chat_message(self, event):
message = event['message']
# Send message to WebSocket
self.send(text_data=json.dumps({
'message': json.dumps(message)
}))
```
###url 路由
```python
from django.urls import path
from . import views
from django.conf.urls import url
urlpatterns = [
path('', views.index, name='index'),
url(r'^(?P<room_name>[^/]+)/$', views.room, name='room'),
path('<int:desk>/add/', views.add_menu),
path('<int:desk>/del/', views.del_menu),
path('<int:desk>/clean/', views.clean_menu),
path('<int:desk>/', views.get_menu),
]
```
##Data ORM表结构和核心数据(菜单和订单)
###models.py 表结构
```python
from django.db import models
from django.db.models import Sum
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils.html import format_html
from django.core import serializers
class MenuType(models.Model):
Name = models.CharField('菜品分类', max_length=50, primary_key=True)
Sort = models.DecimalField('排序', max_digits=20, decimal_places=0, default=0)
def __str__(self):
return self.Name
class Meta:
verbose_name_plural = '菜品分类'
class Menu(models.Model):
Name = models.CharField('菜名', max_length=50, primary_key=True)
Type = models.ForeignKey(MenuType, null=True, on_delete=models.CASCADE, verbose_name='菜品分类', related_name='Menus')
Price = models.DecimalField('价格', max_digits=5, decimal_places=2)
Img = models.ImageField('照片', upload_to='img')
Introduction = models.CharField('简介', max_length=50)
def __str__(self):
return self.Name
class Meta:
verbose_name_plural = '菜单'
class User(models.Model):
OpenId = models.CharField('用户id', max_length=50, primary_key=True)
Name = models.CharField('昵称', max_length=50)
Session = models.CharField('session', max_length=50)
MRP = models.DecimalField('积分', default=0, decimal_places=0,max_digits=10)
def __str__(self):
return self.Name
class Meta:
verbose_name_plural = '用户'
class Desk(models.Model):
DeskMum = models.DecimalField('桌号', max_digits=5, decimal_places=0, primary_key=True)
def __str__(self):
return str(self.DeskMum)
class Meta:
verbose_name_plural = '桌号'
class Order(models.Model):
State_CHOICES = (
('0', '未付款'),
('1', '微信'),
('2', '支付宝'),
('3', '现金'),
)
Cook_CHOICES = (
('1', '已做'),
('0', '未做'),
)
Off = (
('1', '原价'),
('0.98', '98折'),
('0.88', '88折'),
)
OrderId = models.DecimalField('订单号', max_digits=20, decimal_places=0, primary_key=True)
User = models.ForeignKey(User, null=False, to_field='OpenId', on_delete=models.DO_NOTHING, verbose_name='用户')
Desk = models.ForeignKey(Desk, null=False, on_delete=models.DO_NOTHING, verbose_name='桌号')
Time = models.DateTimeField(auto_now_add=True, verbose_name='时间')
Total = models.DecimalField('总金额', max_digits=10, decimal_places=2, default=0)
Off = models.CharField(max_length=6, choices=Off, verbose_name='折扣', default='1')
PayTotal = models.DecimalField('实付金额', max_digits=10, decimal_places=2, default=0)
OrderState = models.CharField(max_length=6, choices=State_CHOICES, verbose_name='付款状态', default='0')
CookState = models.CharField(max_length=6, choices=Cook_CHOICES, verbose_name='后厨状态', default='0')
Comments = models.CharField(max_length=200, verbose_name='备注', default='无')
Menus = models.ManyToManyField(Menu, through='OrderDetail')
def __str__(self):
return str(self.OrderId)
def colored_status(self):
if self.OrderState == '0':
color_code = 'red'
else:
color_code = 'green'
return format_html(
'<span style="color: {};">{}</span>',
color_code,
self.OrderId,
)
colored_status.short_description = '订单号'
class Meta:
verbose_name_plural = '订单'
ordering = ["-Time"]
class OrderDetail(models.Model):
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
order = models.ForeignKey(Order, on_delete=models.CASCADE)
Number = models.IntegerField('数量', default=1)
Price = models.DecimalField('单价快照', null=True, max_digits=5, decimal_places=2, default=0)
def save(self, *args, **kwargs):
self.Price = Menu.objects.get(Name=self.menu).Price
super().save(*args, **kwargs)
class Meta:
verbose_name_plural = '订单详情'
def __str__(self):
return str(self.menu)
class Expenses(models.Model):
Name = models.CharField('备注', max_length=50, default="采购")
Time = models.DateTimeField(verbose_name='时间')
Price = models.DecimalField('金额', max_digits=10, decimal_places=2)
class Meta:
verbose_name_plural = '支出'
```
###views.py 核心数据
```python
import json
import time
from django.http import HttpResponse
from django.core import serializers
from Cart import redis
# Create your views here.
from Data.models import Menu, MenuType, Order, Desk, User, OrderDetail
import pickle
def get_menu_type(request):
data = MenuType.
没有合适的资源?快使用搜索试试~ 我知道了~
基于Django Mysql微信小程序的多人协同点餐系统全部资料+详细文档.zip
共269个文件
jpg:66个
py:51个
pyc:44个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 26 浏览量
2024-12-02
12:55:45
上传
评论
收藏 11.86MB ZIP 举报
温馨提示
【资源说明】 基于Django Mysql微信小程序的多人协同点餐系统全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于Django Mysql微信小程序的多人协同点餐系统全部资料+详细文档.zip (269个子文件)
app.5abc0673.css 197KB
about.0564784e.css 621B
.gitattributes 66B
room.html 1KB
index.html 874B
index.html 741B
favicon.ico 1KB
Order.iml 1KB
backoffice.iml 648B
1C83DA3E-1AFE-4F88-818E-D8AD300B408A.jpeg 658KB
QQ图片20180920205843_wEQTsY6.jpg 986KB
云虫女主_月牙儿_鬼刀壁纸_彼岸图网.jpg 829KB
4.jpg 146KB
4.jpg 146KB
微信图片_20180923012934.jpg 137KB
2.jpg 113KB
2.jpg 113KB
1.jpg 97KB
1.jpg 97KB
本店特色炒酸笋粉.jpg 65KB
3.jpg 64KB
3.jpg 64KB
111.jpg 56KB
秘制锡纸烤鱼.jpg 43KB
微信图片_20180920231325.jpg 41KB
微信图片_20180920204854.jpg 40KB
微信图片_20180920222845.jpg 38KB
微信图片_20180920231439.jpg 35KB
微信图片_20180920231236.jpg 35KB
微信图片_20180920225424.jpg 32KB
timg.jpg 30KB
微信图片_20180920212615.jpg 30KB
凉拌墨鱼嘴.jpg 29KB
凉拌萝卜.jpg 29KB
脆拌卤鸭肠.jpg 28KB
微信图片_20180920220614.jpg 27KB
微信图片_20180920224549.jpg 27KB
微信图片_20180920223359.jpg 27KB
微信图片_20180920231941.jpg 27KB
香辣鸡丝.jpg 27KB
微信图片_20180920230008.jpg 26KB
鲜虾炒粉干.jpg 26KB
微信图片_20180920205602.jpg 26KB
QQ图片20180920205843.jpg 25KB
微信图片_20180920222131_Y1Nqd8D.jpg 25KB
微信图片_20180920222131.jpg 25KB
微信图片_20180920205702.jpg 25KB
微信图片_20180920230830.jpg 24KB
微信图片_20180920205645.jpg 24KB
微信图片_20180920205711.jpg 22KB
微信图片_20180920205623.jpg 21KB
微信图片_20180920205635.jpg 20KB
5e8e65de03eb37d7ad8764c4531e2f16293765.jpg 18KB
微信图片_20180921165304.jpg 12KB
菜品图片_mf5zgpE.jpg 10KB
菜品图片_uOduOLL.jpg 10KB
菜品图片_hDX2En6.jpg 10KB
菜品图片_n5dchUm.jpg 10KB
菜品图片_SUrM3Jg.jpg 10KB
菜品图片_NHNa3sA.jpg 10KB
菜品图片_LpBrbHv.jpg 10KB
菜品图片_AVt7S6M.jpg 10KB
菜品图片_Btil7qK.jpg 10KB
菜品图片_eWGraBc.jpg 10KB
菜品图片_RqhCnGw.jpg 10KB
菜品图片_FV5sKKs.jpg 10KB
菜品图片_EKcvcaV.jpg 10KB
菜品图片_kZyML9u.jpg 10KB
菜品图片_RLqZ9xQ.jpg 10KB
菜品图片_WctNKQw.jpg 10KB
菜品图片_lZyYjTs.jpg 10KB
菜品图片_ZMUYXX5.jpg 10KB
菜品图片.jpg 10KB
3.jpg 8KB
1.jpg 8KB
2.jpg 8KB
chunk-vendors.5dfc6cca.js 1.55MB
about.83699d7c.js 12KB
app.9f7249ae.js 6KB
carte.js 4KB
confirm.js 2KB
pay.js 2KB
index.js 2KB
orders.js 2KB
detail.js 1KB
login.js 1KB
me.js 1KB
app.js 515B
util.js 472B
project.config.json 1KB
app.json 924B
index.json 27B
detail.json 27B
orders.json 27B
confirm.json 27B
carte.json 27B
pay.json 27B
me.json 27B
login.json 27B
chunk-vendors.5dfc6cca.js.map 7.26MB
共 269 条
- 1
- 2
- 3
资源评论
Yuki-^_^
- 粉丝: 3099
- 资源: 1243
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- base(1).apk.1
- K618977005_2012-12-6_beforeP_000.txt.PRM
- 秋招信息获取与处理基础教程
- 程序员面试笔试面经技巧基础教程
- Python实例-21个自动办公源码-数据处理技术+Excel+自动化脚本+资源管理
- 全球前8GDP数据图(python动态柱状图)
- 汽车检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 检测高压线电线-YOLO(v5至v9)、COCO、Darknet、VOC数据集合集.rar
- 检测行路中的人脸-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- Image_17083039753012.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功