主要步骤如下几个方面:
1.店铺信息数据表
2.定义模型Model类
3.编写视图文件views
4.编写urls路由文件
5.编写视图文件
=========================================================================
(1). 店铺信息数据表:shop
- 在数据库 osdb 中创建 shop 表,若此表已存在请跳过
-- 店铺信息表
CREATE TABLE `shop` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '店铺id',
`name` varchar(255) NOT NULL COMMENT '店铺名称',
`cover_pic` varchar(255) DEFAULT NULL COMMENT '封面图片',
`banner_pic` varchar(255) DEFAULT NULL COMMENT '图标Logo',
`address` varchar(255) DEFAULT NULL COMMENT '店铺地址',
`phone` varchar(255) DEFAULT NULL COMMENT '联系电话',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1:正常 2:暂停 9:删除',
`create_at` datetime DEFAULT NULL COMMENT '添加时间',
`update_at` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
(2). 定义模型Model类
- 进入myadmin应用目录中编辑:myobject/myadmin/models.py 模型文件
#店铺信息模型
class Shop(models.Model):
name = models.CharField(max_length=255) #店铺名称
cover_pic = models.CharField(max_length=255)#封面图片
banner_pic = models.CharField(max_length=255)#图标Logo
address = models.CharField(max_length=255) #店铺地址
phone = models.CharField(max_length=255) #联系电话
status = models.IntegerField(default=1) #状态:1正常/2暂停/9删除
create_at = models.DateTimeField(default=datetime.now) #创建时间
update_at = models.DateTimeField(default=datetime.now) #修改时间
def toDict(self):
shopname = self.name.split("-")
return {'id':self.id,'name':shopname[0],'shop':shopname[1],'cover_pic':self.cover_pic,'banner_pic':self.banner_pic,'address':self.address,'phone':self.phone,'status':self.status,'create_at':self.create_at.strftime('%Y-%m-%d %H:%M:%S'),'update_at':self.update_at.strftime('%Y-%m-%d %H:%M:%S')}
class Meta:
db_table = "shop" # 更改表名
(3). 编辑视图文件
- 新建视图文件:myobject/myadmin/views/shop.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 datetime
import time
from myadmin.models import Shop
def index(request,pIndex=1):
'''浏览信息'''
smod = Shop.objects
mywhere=[]
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,5) #以5条每页创建分页对象
maxpages = page.num_pages #最大页数
#判断页数是否越界
if pIndex > maxpages:
pIndex = maxpages
if pIndex < 1:
pIndex = 1
list2 = page.page(pIndex) #当前页数据
plist = page.page_range #页码数列表
#封装信息加载模板输出
context = {"shoplist":list2,'plist':plist,'pIndex':pIndex,'maxpages':maxpages,'mywhere':mywhere}
return render(request,"myadmin/shop/index.html",context)
def add(request):
'''加载添加页面'''
return render(request,"myadmin/shop/add.html")
def insert(request):
'''执行添加'''
try:
# 店铺封面图片的上传处理
myfile = request.FILES.get("cover_pic",None)
if not myfile:
return HttpResponse("没有店铺封面上传文件信息")
cover_pic = str(time.time())+"."+myfile.name.split('.').pop()
destination = open("./static/uploads/shop/"+cover_pic,"wb+")
for chunk in myfile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
#这里还可以做图片的缩放操作,不过这么没有写
# 店铺logo图片的上传处理
myfile = request.FILES.get("banner_pic",None)
if not myfile:
return HttpResponse("没有店铺logo上传文件信息")
banner_pic = str(time.time())+"."+myfile.name.split('.').pop()
destination = open("./static/uploads/shop/"+banner_pic,"wb+")
for chunk in myfile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
#实例化model,封装信息,并执行添加
ob = Shop()
ob.name = request.POST['name']
ob.phone = request.POST['phone']
ob.address = request.POST['address']
ob.cover_pic = cover_pic
ob.banner_pic = banner_pic
ob.status = 1
ob.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,sid=0):
'''删除信息'''
try:
ob = Shop.objects.get(id=sid)
ob.status = 9
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)
return JsonResponse(context)
def edit(request,sid=0):
'''加载编辑信息页面'''
try:
ob = Shop.objects.get(id=sid)
context={"shop":ob}
return render(request,"myadmin/Shop/edit.html",context)
except Exception as err:
context={"info":"没有找到要修改的信息!"}
return render(request,"myadmin/info.html",context)
def update(request,sid):
'''执行编辑信息'''
try:
ob = Shop.objects.get(id=sid)
ob.name = request.POST['name']
ob.phone = request.POST['phone']
ob.address = request.POST['address']
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 index
from myadmin.views import user
from myadmin.views import shop
urlpatterns = [
...
#店铺路由
path('shop/', shop.index, name="myadmin_shop_index"),
path('shop/add', shop.add, name="myadmin_shop_add"),
path('shop/insert', shop.insert, name="myadmin_shop_insert"),
path('shop/del/', shop.delete, name="myadmin_shop_del"),
path('shop/edit/', shop.edit, name="myadmin_shop_edit"),
path('shop/update/', shop.update, name="myadmin_shop_update"),
...
]
(5). 编写模板文件
- 5.1. 打开父类模板:/templates/myadmin/base.html ,编辑导航栏代码
...
- 进入myadmin应用目录中编辑:myobject/myadmin/models.py 模型文件
#店铺信息模型
class Shop(models.Model):
name = models.CharField(max_length=255) #店铺名称
cover_pic = models.CharField(max_length=255)#封面图片
banner_pic = models.CharField(max_length=255)#图标Logo
address = models.CharField(max_length=255) #店铺地址
phone = models.CharField(max_length=255) #联系电话
status = models.IntegerField(default=1) #状态:1正常/2暂停/9删除
create_at = models.DateTimeField(default=datetime.now) #创建时间
update_at = models.DateTimeField(default=datetime.now) #修改时间
def toDict(self):
shopname = self.name.split("-")
return {'id':self.id,'name':shopname[0],'shop':shopname[1],'cover_pic':self.cover_pic,'banner_pic':self.banner_pic,'address':self.address,'phone':self.phone,'status':self.status,'create_at':self.create_at.strftime('%Y-%m-%d %H:%M:%S'),'update_at':self.update_at.strftime('%Y-%m-%d %H:%M:%S')}
class Meta:
db_table = "shop" # 更改表名
(3). 编辑视图文件
- 新建视图文件:myobject/myadmin/views/shop.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 datetime
import time
from myadmin.models import Shop
def index(request,pIndex=1):
'''浏览信息'''
smod = Shop.objects
mywhere=[]
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,5) #以5条每页创建分页对象
maxpages = page.num_pages #最大页数
#判断页数是否越界
if pIndex > maxpages:
pIndex = maxpages
if pIndex < 1:
pIndex = 1
list2 = page.page(pIndex) #当前页数据
plist = page.page_range #页码数列表
#封装信息加载模板输出
context = {"shoplist":list2,'plist':plist,'pIndex':pIndex,'maxpages':maxpages,'mywhere':mywhere}
return render(request,"myadmin/shop/index.html",context)
def add(request):
'''加载添加页面'''
return render(request,"myadmin/shop/add.html")
def insert(request):
'''执行添加'''
try:
# 店铺封面图片的上传处理
myfile = request.FILES.get("cover_pic",None)
if not myfile:
return HttpResponse("没有店铺封面上传文件信息")
cover_pic = str(time.time())+"."+myfile.name.split('.').pop()
destination = open("./static/uploads/shop/"+cover_pic,"wb+")
for chunk in myfile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
#这里还可以做图片的缩放操作,不过这么没有写
# 店铺logo图片的上传处理
myfile = request.FILES.get("banner_pic",None)
if not myfile:
return HttpResponse("没有店铺logo上传文件信息")
banner_pic = str(time.time())+"."+myfile.name.split('.').pop()
destination = open("./static/uploads/shop/"+banner_pic,"wb+")
for chunk in myfile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
#实例化model,封装信息,并执行添加
ob = Shop()
ob.name = request.POST['name']
ob.phone = request.POST['phone']
ob.address = request.POST['address']
ob.cover_pic = cover_pic
ob.banner_pic = banner_pic
ob.status = 1
ob.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,sid=0):
'''删除信息'''
try:
ob = Shop.objects.get(id=sid)
ob.status = 9
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)
return JsonResponse(context)
def edit(request,sid=0):
'''加载编辑信息页面'''
try:
ob = Shop.objects.get(id=sid)
context={"shop":ob}
return render(request,"myadmin/Shop/edit.html",context)
except Exception as err:
context={"info":"没有找到要修改的信息!"}
return render(request,"myadmin/info.html",context)
def update(request,sid):
'''执行编辑信息'''
try:
ob = Shop.objects.get(id=sid)
ob.name = request.POST['name']
ob.phone = request.POST['phone']
ob.address = request.POST['address']
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 index
from myadmin.views import user
from myadmin.views import shop
urlpatterns = [
...
#店铺路由
path('shop/', shop.index, name="myadmin_shop_index"),
path('shop/add', shop.add, name="myadmin_shop_add"),
path('shop/insert', shop.insert, name="myadmin_shop_insert"),
path('shop/del/', shop.delete, name="myadmin_shop_del"),
path('shop/edit/', shop.edit, name="myadmin_shop_edit"),
path('shop/update/', shop.update, name="myadmin_shop_update"),
...
]
(5). 编写模板文件
- 5.1. 打开父类模板:/templates/myadmin/base.html ,编辑导航栏代码
...
- 打开根路由文件:myobject/myadmin/urls.py路由文件,编辑路由配置信息
from django.urls import path
from myadmin.views import index
from myadmin.views import user
from myadmin.views import shop
urlpatterns = [
...
#店铺路由
path('shop/', shop.index, name="myadmin_shop_index"),
path('shop/add', shop.add, name="myadmin_shop_add"),
path('shop/insert', shop.insert, name="myadmin_shop_insert"),
path('shop/del/', shop.delete, name="myadmin_shop_del"),
path('shop/edit/', shop.edit, name="myadmin_shop_edit"),
path('shop/update/', shop.update, name="myadmin_shop_update"),
...
]
(5). 编写模板文件
- 5.1. 打开父类模板:/templates/myadmin/base.html ,编辑导航栏代码
...
- 5.2. 后台店铺信息浏览页模板:/templates/myadmin/shop/index.html
{% extends "myadmin/base.html" %}
{% block main_body %}
店铺管理
订餐系统后台管理
- 首页
- 店铺信息管理
店铺信息表
ID
店铺名称
封面图片
Logo图片
联系电话
当前状态
添加时间
修改时间
操作
{% for vo in shoplist %}
{{ vo.id }}
{{ vo.name }}
{ vo.cover_pic }}" width="60"/>
{ vo.banner_pic }}" width="40"/>
{{ vo.phone }}
{% if vo.status == 1 %}
营业中..
{% elif vo.status == 2 %}
休息中..
{% elif vo.status == 9 %}
已删除
{% else %}
未知状态
{% endif %}
{{ vo.create_at|date:'Y-m-d' }}
{{ vo.update_at|date:'Y-m-d' }}
编辑
{% endfor %}
添加店铺
- «
{% for p in plist %}
- {{p}}
{% endfor %}
- »
{% endblock %}
- 5.3. 后台店铺信息添加表单页模板:/templates/myadmin/shop/add.html
{% extends "myadmin/base.html" %}
{% block main_body %}
店铺管理
订餐系统后台管理
- 首页
- 店铺管理
添加店铺信息
{% endblock %}
- 5.4. 后台店铺信息编辑模板:/templates/myadmin/shop/edit.html
{% extends "myadmin/base.html" %}
{% block main_body %}
店铺管理
订餐系统后台管理
- 首页
- 店铺管理
编辑店铺信息
{% endblock %}



