增删改查。配置对应路由,函数,视图。报错注意看控制台。

添加取到前台传来的参数,后端给予验证。入库

编辑,取到当前编辑得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>

Django增删改查的更多相关文章

  1. django 增删改查操作 数据库Mysql

    下面介绍一下django增删改查操作: 1.view.py # -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom dja ...

  2. Django 自带的ORM增删改查

     通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...

  3. Django数据库操作(增删改查)

    Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...

  4. Django中ORM表的创建以及基本增删改查

    Django作为重量级的Python web框架,在做项目时肯定少不了与数据库打交道,编程人员对数据库的语法简单的还行,但过多的数据库语句不是编程人员的重点对象.因此用ORM来操作数据库相当快捷.今天 ...

  5. 饮冰三年-人工智能-Python-24 Django ORM增删改查

    一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...

  6. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  7. python的Web框架,Django的ORM,模型基础,MySQL连接配置及增删改查

    Django中的ORM简介 ORM概念:对象关系映射(Object Relational Mapping,简称ORM): 用面向对象的方式描述数据库,去操作数据库,甚至可以达到不用编写SQL语句就能够 ...

  8. Django之数据表增删改查

    Django数据增删改查: 上课代码 from django.shortcuts import render,HttpResponse # Create your views here. from a ...

  9. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  10. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

随机推荐

  1. c#利用反射获取枚举的信息

    1.将不同的枚举类型作为形参传入某函数内时,形参为Enum,在函数体内进行类型强转. private T GetEnumType<T>(object o) { T enumVal = (T ...

  2. 解决 Error L6915E 问题

    出现以下错误: Error: L6915E: Library reports error: The semihosting __user_initial_stackheap cannot reliab ...

  3. 【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固

    ​ 摘要 在开发iOS应用时,保护应用程序的安全是非常重要的.本文将介绍一种使用ipaguard混淆加固的方法来保护iOS应用的安全.通过字符串混淆.类名和方法名混淆.程序结构混淆加密以及反调试.反注 ...

  4. goto关键词

    1.前言 goto,一个蒟蒻一用就废,大佬一用就吊炸天的神奇关键字. 今天,我要来盘它!!! 2.goto只能在函数内实现跳转,不能跨函数跳转 因为标号label是局部有效的. #include &l ...

  5. 生命游戏(4.2leetcode每日打卡)

    根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具有一个初始状 ...

  6. C语言输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序建立单链表并输出。

    /* 开发者:慢蜗牛 开发时间:2020.6.11 程序功能:逆序建立链表,顺序输出 */ #include<stdio.h> #include<malloc.h> #defi ...

  7. 给大家介绍一款强大的抓包代理工具--mitmproxy

    最近工作中涉及到和app相关的测试工作,需要用到mock,特意网上查了些资料,发现有很多工具可以实现app的mock,但是经过我反复试用后,发现mitmproxy这个工具非常的强大 我认为mitmpr ...

  8. Python读取Ansible playbooks返回信息

    一.背景及概要设计 当公司管理维护的服务器到达一定规模后,就必然借助远程自动化运维工具,而ansible是其中备选之一.Ansible基于Python开发,集合了众多运维工具(puppet.chef. ...

  9. excute方法和submit方法

    区别:   1.参数     execute  Runnable     submit     Callable   2.返回值     execute :void     submit :Futur ...

  10. Curator