增删改查。配置对应路由,函数,视图。报错注意看控制台。
添加取到前台传来的参数,后端给予验证。入库
编辑,取到当前编辑得id,在后台查到对应数据。重新update
删除,取到当前点击ID,后台delete
添加
views.py
#添加数据
class Index(APIView):
def get(self, request):
return render(request,'addgoods.html')
#POST接受添加数据
def post(self,request):
mes={}
name = request.data.get('name')
price = request.data.get('price')
img = request.FILES.get('img')
# print(name,price,img)
if not all([name,price,img]):
mes['code'] = 250
mes['message'] = '全要输入~'
else:
#写入图片
img_name = img.name
f = open(os.path.join(settings.UPLOAD_FILE, img_name), 'wb')
for i in img.chunks():
f.write(i)
f.close()
# 添加图库
goods = Goods(name=name, price=price, img='/upload/' + img_name)
goods.save()
mes['code'] = 200
mes['message'] = '添加成功'
# goods = Goods.objects.all()
# print(goods)
return redirect('/api/goods')
return render(request,'index.html',locals())
addgoods.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加商品</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
名称: <input type="text" name='name' value="" width=100><br>
价格: <input type="text" name='price' value="" width=100><br>
图片: <input type="file" name='img' value="" width=100><br>
确定: <input type="submit" value="确定">
</form>
</body>
</html>
删除
view.py
# 删除商品
class Pop_goods(APIView):
# get获取数据删除
def get(self,request):
mes={}
id = request.GET.get('id')
# print(id)
# 删除
try:
goods = Goods.objects.filter(id=id).delete()
except:
goods ={}
# 返回
mes['code']=200
mes['message']= '删除成功'
goods = Goods.objects.all()
return render(request, 'goodslist.html', locals())
del.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<th>序号</th>
<th>商品名称</th>
<th>价格</th>
<th>图片</th>
<th>删除</th>
<th>编辑</th>
<th>添加</th>
</tr>
{#使用for循环拿到当前页面上的所有数据对象(for循环中的c_page相当于c_page.object_list)#}
{% for i in c_page %}
<tr>
<td>{{i.id}}</td>
<td>{{i.name}}</td>
<td>{{i.price}}</td>
<td><img src="{{i.img}}" width="150" height="100"></td>
<td> <a href="/api/del/?id={{i.id}}" class="delete">删除</a></td>
<td> <a href="/api/edit/?id={{i.id}}" class="edit">修改</a></td>
<td><a href="/api/index/">添加</a></td>
</tr>
{% endfor %}
</table>
{# 要实现的效果#}
{# 上一页 1 2 3 下一页#}
{# 0、实现上一页 #}
{# 若有上一页,则拿到上一页的页码超链接 #}
{% if c_page.has_previous %}
<a href="/api/goods?page={{ c_page.previous_page_number }}">上一页</a>
{# 若没有上一页,则显示为普通的字符即可 #}
{% else %}
上一页
{% endif %}
{# 1、实现中间部分 #}
{#使用循环拿到每个页面#}
{% for p_num in paginator.page_range %}
{#若是当前页,则显示为普通的一个数字#}
{% if p_num == c_page_number %}
{{ p_num }}
{# 若不是当前页面,则显示为一个超链接 #}
{% else %}
<a href="/api/goods?page={{ p_num }}">{{ p_num }}</a>
{% endif %}
{% endfor %}
{# 2、实现下一页 #}
{# 若有下一页,则拿到下一页的页码超链接 #}
{% if c_page.has_next %}
<a href="/api/goods?page={{ c_page.next_page_number }}">下一页</a>
{# 若没有下一页,则显示为普通的字符即可 #}
{% else %}
下一页
{% endif %}
</body>
</html>
编辑
views.py
# 修改商品
class Change_goods(APIView):
def get(self,request):
id = request.GET.get('id')
goods = Goods.objects.filter(id=id)
return render(request, 'index.html', locals())
# 根据id获取数据
def post(self,request):
mes={}
id = request.GET.get('id')
print(id,'获取的编辑id')
name = request.data.get('name')
price = request.data.get('price')
img = request.FILES.get('img')
# print(id,name,price,img)
# 写入图片
img_name = img.name
f = open(os.path.join(settings.UPLOAD_FILE,img_name),'wb')
for i in img.chunks():
f.write(i)
f.close()
# 获取数据
goods = Goods.objects.filter(id=id).first()
goods.name=name
goods.price=price
goods.img='/upload/'+img_name
goods.save()
# 返回
mes['code']=200
mes['message']='修改成功'
return redirect('/api/goods')
edit.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>花满楼</h1>
<form method="post" enctype="multipart/form-data">
{% for i in goods %}
名称: <input type="text" name='name' value="{{i.name}}" width=100><br>
价格: <input type="text" name='price' value="{{i.price}}" width=100><br>
图片: <input type="file" name='img' value="" width=100><br>
确定: <input type="submit" value="确定">
{% endfor %}
</form>
{{mes}}
</body>
</html>
分页
views.py
from django.core.paginator import Paginator
#展示
class Goods_list(View):
def get(self, request):
page_num = request.GET.get('page', 1)
# all_data = ['a']
goods = Goods.objects.all()
# 1、初始化paginator
# 传入的参数(要分页的数据,每页要显示的数据条数)
paginator = Paginator(goods, 2)
# 2、初始化具体页码对应的page对象
c_page = paginator.page(int(page_num))
# 3、将值传入模板
return render(request, 'goodslist.html', locals())
fenye.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<th>序号</th>
<th>商品名称</th>
<th>价格</th>
<th>图片</th>
<th>删除</th>
<th>编辑</th>
<th>添加</th>
</tr>
{#使用for循环拿到当前页面上的所有数据对象(for循环中的c_page相当于c_page.object_list)#}
{% for i in c_page %}
<tr>
<td>{{i.id}}</td>
<td>{{i.name}}</td>
<td>{{i.price}}</td>
<td><img src="{{i.img}}" width="150" height="100"></td>
<td> <a href="/api/del/?id={{i.id}}" class="delete">删除</a></td>
<td> <a href="/api/edit/?id={{i.id}}" class="edit">修改</a></td>
<td><a href="/api/index/">添加</a></td>
</tr>
{% endfor %}
</table>
{# 要实现的效果#}
{# 上一页 1 2 3 下一页#}
{# 0、实现上一页 #}
{# 若有上一页,则拿到上一页的页码超链接 #}
{% if c_page.has_previous %}
<a href="/api/goods?page={{ c_page.previous_page_number }}">上一页</a>
{# 若没有上一页,则显示为普通的字符即可 #}
{% else %}
上一页
{% endif %}
{# 1、实现中间部分 #}
{#使用循环拿到每个页面#}
{% for p_num in paginator.page_range %}
{#若是当前页,则显示为普通的一个数字#}
{% if p_num == c_page_number %}
{{ p_num }}
{# 若不是当前页面,则显示为一个超链接 #}
{% else %}
<a href="/api/goods?page={{ p_num }}">{{ p_num }}</a>
{% endif %}
{% endfor %}
{# 2、实现下一页 #}
{# 若有下一页,则拿到下一页的页码超链接 #}
{% if c_page.has_next %}
<a href="/api/goods?page={{ c_page.next_page_number }}">下一页</a>
{# 若没有下一页,则显示为普通的字符即可 #}
{% else %}
下一页
{% endif %}
</body>
</html>
标签:goods,name,img,改查,id,request,Django,增删,page
From: https://www.cnblogs.com/djl-0628/p/16998525.html