09. 项目实战之后台菜品类别信息管理
主要分为下面几步:
1.菜品类别信息数据表:category
2.定义模型Model类
3.编辑视图文件views
4.项目urls路由信息配置
5.编写模板文件
=========================================================================
(1). 菜品类别信息数据表:category
- 在数据库
osdb中创建category表,若此表已存在请跳过
CREATE TABLE `category` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '菜品分类id',`shop_id` int(11) DEFAULT NULL COMMENT '店铺id',`name` varchar(50) DEFAULT NULL COMMENT '分类名称',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1正常 9删除',`create_at` datetime DEFAULT NULL COMMENT '添加时间',`update_at` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
一个类别可能属于很多店铺的,所以是一对多的关系,所以在字段里有店铺id
(2). 定义模型Model类
- 进入
myadmin应用目录中编辑:myobject/myadmin/models.py模型文件
from django.db import models#菜品分类信息模型
class Category(models.Model):shop_id = models.IntegerField() #店铺idname = models.CharField(max_length=50)#分类名称status = models.IntegerField(default=1) #状态:1正常/9删除create_at = models.DateTimeField(default=datetime.now) #创建时间update_at = models.DateTimeField(default=datetime.now) #修改时间class Meta:db_table = "category" # 更改表名
因为这个表格,不需要对数据输出,所以这个表格没有定义转成字典的方法。
(3). 编辑视图文件
- 新建视图文件:myobject/myadmin/views/category.py 视图文件,并进行编辑
from django.shortcuts import render
from django.http import HttpResponse
from django.http import JsonResponse
from django.core.paginator import Paginator
from datetime import datetimefrom myadmin.models import Category,Shop# 菜品分类信息def index(request,pIndex=1):'''浏览信息'''smod = Category.objectsmywhere=[]list = smod.filter(status__lt=9)# 获取、判断并封装关keyword键搜索kw = request.GET.get("keyword",None)if kw:# 查询店铺名称中只要含有关键字就可以list = list.filter(name__contains=kw)mywhere.append("keyword="+kw)# 获取、判断并封装状态status搜索条件status = request.GET.get('status','')if status != '':list = list.filter(status=status)mywhere.append("status="+status)list = list.order_by("id") #对id排序#执行分页处理pIndex = int(pIndex)page = Paginator(list,10) #以10条每页创建分页对象maxpages = page.num_pages #最大页数#判断页数是否越界if pIndex > maxpages:pIndex = maxpagesif pIndex < 1:pIndex = 1list2 = page.page(pIndex) #当前页数据plist = page.page_range #页码数列表#上面查出当前菜品类别的信息,然后下面是关联店铺查询#遍历信息,并获取对应的商铺名称,以shopname名封装for vo in list2:sob = Shop.objects.get(id=vo.shop_id) #这是取出了店铺的名称vo.shopname = sob.name#封装信息加载模板输出context = {"categorylist":list2,'plist':plist,'pIndex':pIndex,'maxpages':maxpages,'mywhere':mywhere}return render(request,"myadmin/category/index.html",context)def loadCategory(request,sid):clist = Category.objects.filter(status__lt=9,shop_id=sid).values("id","name")#返回QuerySet对象,使用list强转成对应的菜品分类列表信息return JsonResponse({'data':list(clist)})def add(request):'''加载添加页面''''''获取当前所有店铺信息的id和name字段'''slist = Shop.objects.values("id","name")context={"shoplist":slist}return render(request,"myadmin/category/add.html",context)def insert(request):'''执行添加'''try:ob = Category()ob.shop_id = request.POST['shop_id']ob.name = request.POST['name']ob.status = 1ob.create_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")ob.save()context={"info":"添加成功!"}except Exception as err:print(err)context={"info":"添加失败"}return render(request,"myadmin/info.html",context)def delete(request,cid=0):'''删除信息'''try:ob = Category.objects.get(id=cid)ob.status = 9ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")ob.save()context={"info":"删除成功!"}except Exception as err:print(err)context={"info":"删除失败"}return JsonResponse(context)#return render(request,"myadmin/info.html",context)def edit(request,cid=0):'''加载编辑信息页面'''try:ob = Category.objects.get(id=cid)slist = Shop.objects.values("id","name")context={"category":ob,"shoplist":slist}return render(request,"myadmin/category/edit.html",context)except Exception as err:context={"info":"没有找到要修改的信息!"}return render(request,"myadmin/info.html",context)def update(request,cid):'''执行编辑信息'''try:ob = Category.objects.get(id=cid)ob.shop_id = request.POST['shop_id']ob.name = request.POST['name']#ob.status = request.POST['status']ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")ob.save()context={"info":"修改成功!"}except Exception as err:print(err)context={"info":"修改失败"}return render(request,"myadmin/info.html",context)
(4). 项目urls路由信息配置
- 打开根路由文件:myobject/myadmin/urls.py路由文件,编辑路由配置信息
from django.urls import path
...
from myadmin.views import categoryurlpatterns = [#菜品分类信息管理path('category/', category.index, name="myadmin_category_index"),path('category/load/', category.loadCategory, name="myadmin_category_load"),path('category/add', category.add, name="myadmin_category_add"),path('category/insert', category.insert, name="myadmin_category_insert"),path('category/del/', category.delete, name="myadmin_category_del"),path('category/edit/', category.edit, name="myadmin_category_edit"),path('category/update/', category.update, name="myadmin_category_update"),
]
(5). 编写模板文件
- 5.1. 打开父类模板:/templates/myadmin/base.html ,编辑导航栏代码
... 菜品管理 ...
- 5.2. 后台商品类别信息浏览页模板:/templates/myadmin/category/index.html

{% extends "myadmin/base.html" %}{% block main_body %}菜品类别管理订餐系统后台管理
菜品分类信息表
ID 店铺名称 类别名称 当前状态 添加时间 修改时间 操作 {% for vo in categorylist %}{{ vo.id }} {{ vo.shopname }} {{ vo.name }} {% if vo.status == 1 %}正常{% elif vo.status == 9 %}已删除{% else %}未知状态{% endif %} {{ vo.create_at|date:'Y-m-d' }} {{ vo.update_at|date:'Y-m-d' }} 编辑 查看菜品 {% endfor %}
添加菜品分类- {mywhere|join:'&'}}">«
{% for p in plist %}- {mywhere|join:'&'}}">{{p}}
{% endfor %}- {mywhere|join:'&'}}">»
{% endblock %}
- 5.3. 后台商品类别信息添加表单页模板:/templates/myadmin/category/add.html

{% extends "myadmin/base.html" %}{% block main_body %}菜品分类管理订餐系统后台管理
{% endblock %}
- 5.4. 后台商品信息编辑模板:/templates/myadmin/category/edit.html

{% extends "myadmin/base.html" %}{% block main_body %}菜品分类管理订餐系统后台管理
{% endblock %}
6 运行测试
- 在项目根目录下启动服务,并使用浏览器访问测试:http://localhost:8000/myadmin
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
