目录
1、修改商品信息
(1)修改show.html页面,增加 修改 栏
(2)创建 update.html 网页,继承 add.html 模板
(3)定义视图函数
(4)定义路由
(5) 浏览器查看 修改商品信息功能实现
2、删除商品
(1)修改 show.html 网页,增加 删除 栏
(2)定义视图函数,实现删除商品的逻辑
(3)定义路由
源代码
1、修改商品信息
在上个基础上(实现了商品展示和添加功能)继续
(1)修改show.html页面,增加 修改 栏
(2)创建 update.html 网页,继承 add.html 模板
继承之前需要对add 添加一些 block标签
add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}
<title>添加商品信息</title>
{% endblock %}
</head>
<body>
{% block h1 %}
<h1>添加商品信息</h1>
{% endblock %}
<form method="post" novalidate>
{% csrf_token %}
{{ form.as_p }}
{% block input %}
<input type="submit" value="添加商品信息">
{% endblock %}
</form>
</body>
</html>
创建 update.html
<!-- 因为添加商品信息和修改商品信息的页面结构类似,因此可以使用模版继承 -->
{% extends 'add.html' %}
{% block title %}
<title>修改商品信息</title>
{% endblock %}
<body>
{% block h1 %}
<h1>修改商品信息</h1>
{% endblock %}
{% block input %}
<input type="submit" value="修改商品信息">
{% endblock %}
(3)定义视图函数
def update_goods(request,gid):
"""修改商品信息"""
# 根据传递过来的gid去数据库中获取对应的记录
# good = Goods.objects.get(id=gid)
good = Goods.objects.filter(id=gid).first()
print(good)
if request.method == 'GET':
form = GoodsForm(instance=good) # instance=good 把获取到的当前 good对象显示在表单中
return render(request,'update.html',{'form':form})
else:
form = GoodsForm(request.POST,instance=good) # instance=good参数,如果没有这个参数则是添加效果,有了这个参数才是修改效果
if form.is_valid():
try:
form.save()
except Exception as e:
return HttpResponseForbidden(f'修改商品失败,错误原因:{e}')
return redirect('/') # 页面重定向到展示商品信息的页面
return render(request, 'update.html', {'form': form})
(4)定义路由
path('update/<int:gid>/',views.update_goods),
(5) 浏览器查看 修改商品信息功能实现
2、删除商品
(1)修改 show.html 网页,增加 删除 栏
(2)定义视图函数,实现删除商品的逻辑
(3)定义路由
源代码
show.html完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>商品信息</title>
</head>
<body>
<h3>下面将通过表格的形式展示商品信息</h3>
<!-- table表格 tr 行 th 表头 标题 td 数据-->
<table border="1">
<tr>
<th>商品ID</th>
<th>商品名称</th>
<th>商品价格</th>
<th>商品库存</th>
<th>商品销量</th>
<th>修改商品信息</th>
<th>删除信息</th>
</tr>
{% for good in goods %}
<tr>
<td>{{ good.id }}</td>
<td>{{ good.name }}</td>
<td>{{ good.price }}</td>
<td>{{ good.stock }}</td>
<td>{{ good.sales }}</td>
<td align="center">
<a href="/update/{{ good.id }}">修改</a>
</td>
<td align="center">
<a href="/delete/{{ good.id }}">删除</a>
</td>
</tr>
{% endfor %}
</table>
<div>
<a href="/add/">添加商品信息</a>
</div>
</body>
</html>
add.html完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}
<title>添加商品信息</title>
{% endblock %}
</head>
<body>
{% block h1 %}
<h1>添加商品信息</h1>
{% endblock %}
<form method="post" novalidate>
{% csrf_token %}
{{ form.as_p }}
{% block input %}
<input type="submit" value="确定添加">
{% endblock %}
</form>
</body>
</html>
update.html完整代码
<!-- 页面结构类似,可以使用模板继承 注意 %} 不能有空格-->
{% extends 'add.html' %}
{% block title %}
<title>修改商品信息</title>
{% endblock %}
{% block h1 %}
<h1>修改商品信息</h1>
{% endblock %}
{% block input %}
<input type="submit" value="确定修改">
{% endblock %}
views.py完整代码
from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import render, redirect
from .models import Goods
def show_goods(request):
"""显示商品信息"""
# 从数据库中查询所有的数据 all 查找所有信息 filter匹配某个条件 exclude 排除符合某个条件的信息
all_goods = Goods.objects.all()
print(all_goods) # 输出查询到的数据
# return HttpResponse('查询到信息了')
return render(request,'show.html',{'goods':all_goods})
from .forms import GoodsForm
def add_goods(request):
"""添加商品信息"""
if request.method == 'GET':
form = GoodsForm() # 实例化空表单
return render(request,'add.html',{'form':form})
else:
form = GoodsForm(request.POST) # 获取表单数据并实例化表单
good = Goods() # 实例化一个商品对象,用于存放表单数据
if form.is_valid():
good.name = form.cleaned_data['name'] # 取出验证过的数据
good.price = form.cleaned_data['price']
good.stock = form.cleaned_data['stock']
good.sales = form.cleaned_data['sales']
try:
good.save() # 把数据写入数据库
except Exception as e:
return HttpResponseForbidden(f'数据错误,添加失败,原因:{e}')
return redirect('/') # 页面重定向
return render(request,'add.html',{'form':form}) # forms携带错误信息的
def update_goods(request,gid):
"""修改商品信息"""
# 根据传递过来的gid去数据库中获取对应的记录
# good = Goods.objects.get(id=gid)
good = Goods.objects.filter(id=gid).first()
print(good)
if request.method == 'GET':
form = GoodsForm(instance=good) # instance=good 把获取到的当前 good对象显示在表单中
return render(request,'update.html',{'form':form})
else:
form = GoodsForm(request.POST,instance=good) # instance=good参数,如果没有这个参数则是添加效果,有了这个参数才是修改效果
if form.is_valid():
try:
form.save()
except Exception as e:
return HttpResponseForbidden(f'修改商品失败,错误原因:{e}')
return redirect('/') # 页面重定向到展示商品信息的页面
return render(request, 'update.html', {'form': form})
def delete_goods(request,gid):
"""删除商品信息"""
# 根据gid去数据库拿到对应的记录
good = Goods.objects.filter(id=gid).first()
try:
good.delete() # 删除记录
except Exception as e:
return HttpResponseForbidden(f'删除失败,错误原因:{e}')
return redirect('/')
app1/urls.py完整代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.show_goods),
path('add/',views.add_goods),
path('update/<int:gid>/',views.update_goods),
path('delete/<int:gid>/',views.delete_goods)
]