本章知识点
1、列表数据的存储
2、列表数据的展示
3、列表数据的管理
知识点讲解
1、列表数据的存储
两部分
前端样式
涉及到图片,需要加的东西
method=“post” 请求发方法
action = “address” 默认为空,可以不写代表提交给当前路由
enctype=“multipart/form-data” 上传文件必须的参数,否则,后台获取不到文件对象
{% csrf_token %} csrf校验值

multiple input文件上传组件上传多张图片必须的参数

导入的模块
import os #路径拼接
from Qshop.settings import MEDIA_ROOT #保存图片的路径
import datetime #时间
from Seller.models import Goods,Types,Image #数据模型

Views保存商品数据
postData = request.POST
goods_id = postData.get(“goods_num”)
goods_name = postData.get(“goods_name”)
goods_price = postData.get(“goods_oprice”) # 原价
goods_now_price = postData.get(“goods_xprice”) # 当前价格
goods_num = postData.get(“goods_count”) # 库存
goods_description = postData.get(“goods_description”) # 描述
goods_content = postData.get(“goods_content”) # 详情
types = postData.get(“goods_type”)
goods_show_time = datetime.datetime.now() # 发布时间
#存入数据库
#先保存商品
goods = Goods()
goods.goods_id = goods_id
goods.goods_name = goods_name
goods.goods_price = goods_price
goods.goods_now_price = goods_now_price
goods.goods_num = goods_num
goods.goods_description = goods_description
goods.goods_content = goods_content
goods.goods_show_time = goods_show_time
goods.types = Types.objects.get(id = int(types))
id = request.COOKIES.get(“id”)
if id:
goods.seller = Seller.objects.get(id = int(id))
else:
return HttpResponseRedirect("/seller/login/")
goods.save()
保存商品图片
imgs = request.FILES.getlist(“userfiles”)
#保存图片
for index,img in enumerate(imgs):
#保存图片到服务器
file_name = img.name
file_path = “seller/images/%s_%s.%s”%(goods_name,index,file_name.rsplit(".",1)[1])
save_path = os.path.join(MEDIA_ROOT,file_path).replace("/","\")
try:
with open(save_path,“wb”) as f:
for chunk in img.chunks(chunk_size=1024):
f.write(chunk)
#保存路径到数据库
i = Image()
i.img_adress = file_path
i.img_label = “%s_%s”%(index,goods_name)
i.img_description = “this is description”
i.goods = goods
i.save()
except Exception as e:
print(e)
2、列表数据的展示
列表页

修改和删除数据
修改和增加用的一个页面,我们需要按照请求来区分页面

删除主外键表的时候
删除主键表需要先删除关联的外键
删除外键表不需要先删除关联的主键

修改数据的时候:
完整的视图代码
见项目:Qshop\Seller\views.py
完整的HTML代码
见项目:Qshop\Seller\templates\seller\goods_add.html
Qshop\Seller\templates\seller\goods_list.html
完整的路由代码
\Qshop\Seller\urls.py
from django.urls import path,re_path
from Seller.views import *

urlpatterns = [
re_path(’^$’, index),
path(‘index/’, index),
path(‘login/’, login),
path(‘logout/’, logout),
path(‘goods_add/’, goods_add, name = “goods_add”),
path(‘goods_list/’, goods_list, name = “goods_list”),
re_path(‘goods_change/(?P\d+)/’, goods_change, name=“goods_change”),
re_path(‘goods_del/(?P\d+)/’, goods_del, name=“goods_del”),
path(‘example/’, example),]
3 列表数据的管理
数据更新:
def goods_change(request,id):
doType = “change”
goods = Goods.objects.get(id = int(id))
if request.method == “POST” and request.POST:
#获取前端表单数据

    postData = request.POSTgoods_id = postData.get("goods_num")goods_name = postData.get("goods_name")goods_price = postData.get("goods_oprice")  # 原价goods_now_price = postData.get("goods_xprice")  # 当前价格goods_num = postData.get("goods_count")  # 库存goods_description = postData.get("goods_description")  # 描述goods_content = postData.get("goods_content")  # 详情types = postData.get("goods_type")goods_show_time = datetime.datetime.now()  # 发布时间#存入数据库#先保存商品goods = Goods.objects.get(id = int(id))goods.goods_id = goods_idgoods.goods_name = goods_namegoods.goods_price = goods_pricegoods.goods_now_price = goods_now_pricegoods.goods_num = goods_numgoods.goods_description = goods_descriptiongoods.goods_content = goods_contentgoods.goods_show_time = goods_show_time#Goods.objects.create(goods_id = goods_id) #增加,参数写在括号里,不需要save#Goods.objects.update(goods_id = goods_id) #修改,参数写在括号里,不需要savegoods.types = Types.objects.get(id = int(types))id = request.COOKIES.get("id")if id:goods.seller = Seller.objects.get(id = int(id))else:return HttpResponseRedirect("/seller/login/")goods.save()imgs = request.FILES.getlist("userfiles")#保存图片for index,img in enumerate(imgs):#保存图片到服务器file_name = img.namefile_path = "seller/images/%s_%s.%s"%(goods_name,index,file_name.rsplit(".",1)[1])save_path = os.path.join(MEDIA_ROOT,file_path).replace("/","\\")try:with open(save_path,"wb") as f:for chunk in img.chunks(chunk_size=1024):f.write(chunk)#保存路径到数据库i = Image()i.img_adress = file_pathi.img_label = "%s_%s"%(index,goods_name)i.img_description = "this is description"i.goods = goodsi.save()return HttpResponseRedirect("/seller/goods_list")except Exception as e:print(e)
return render(request,"seller/goods_add.html",locals())

数据删除:
def goods_del(request,id):
#删除部分
goods = Goods.objects.get(id=int(id))
imgs = goods.image_set.all()
imgs.delete() #先删除外键表
goods.delete() # 再删除主键表数据
return HttpResponseRedirect("/seller/goods_list")

015:Django商城项目表单处理相关推荐

  1. 【愚公系列】2022年02月 Django商城项目 34-订单支付功能实现(支付宝)

    文章目录 前言 一.回调逻辑处理 1.安装SDK 2.生成私钥公钥 3.setting中支付宝配置信息 4.生成支付URL 5.接收支付成功信息 前言 具体支付宝支付流程可参考这篇文章:https:/ ...

  2. Django基础(11): 表单集合Formset的高级用法详解

    Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...

  3. Django中的表单如何使用? Django如何验证前端发来的数据? ✧*。٩(ˊᗜˋ*)و✧*。 Django初体验

    文章目录 前期准备 前端准备 表单基础使用 创建表单 表单类型 Field CharField(Field) IntergerField(Field)与 FloatField(Filed) Decim ...

  4. Django的Form表单

    Django的Form表单 Django Form  Form介绍 Form 表单是在前端向后端提交数据最常用的方式,同时在好多场景下都需要对用户的输入进行校验. 以注册为例,Form 需要的三件事: ...

  5. django之Form表单

    HTML表单 在HTML中,表单是<form>...</form> 之间元素的集合,它们允许访问者输入文本.选择选项.操作对象和控制等等,然后将信息发送回服务器. 某些表单的元 ...

  6. django系列10 --- 表单

    django系列8 --- 接收.处理.响应客户在界面的输入 前言 一.html 表单 1.1 get 和 post 方法 二.django在表单中的角色 三.django中的表单 四.构建一张表单 ...

  7. 【愚公系列】2022年01月 Django商城项目13-登录界面-QQ登录功能实现

    文章目录 前言 1.QQ互联开发者申请 2.QQ互联应用申请 3.网站对接QQ登录 一.django实际对接流程 1.创建抽象模型类 2.创建QQ用户模型类 3.注册应用 4.配置QQ登录信息 5.登 ...

  8. Django(part46)--form表单验证

    学习笔记,仅供参考 文章目录 form表单验证 举个例子 form表单验证 form提供表单和字段验证,我们可以使用form.is_valid() 方法进行表单验证,若该方法返回值为True,则表示当 ...

  9. django,form表单,数据库增删改查

    Django 02  复习:   Django下载:    在命令行输入:     pip3 install django==1.11.11     在这里不要用最新的3.7,推荐使用3.6/3.5/ ...

最新文章

  1. 可以用JAVA编程的物联网开发板,了解一下?
  2. 【面试锦囊】位运算介绍与经典例题总结
  3. 为工厂分配用于公司间开票的销售范围
  4. 星空下的痕迹 Jenkins学习(四)----------windows下Publish over FTP插件应用
  5. Vue computed 带参数
  6. springboot2源码1-SpringApplication实例化
  7. Altera FPGA程序固化
  8. android 70 使用ListView把数据显示至屏幕
  9. 名编辑电子杂志大师教程 | PDF制作排版设计建议
  10. 接收机抽取的Matlab仿真代码,接收机的MATLAB仿真程序代码
  11. 32位服务器系统支持8G内存,32位系统怎么支持8g内存条win10 64位系统闲置服务器...
  12. HTML颜色表及html代码
  13. 创建exchange邮箱用户
  14. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项列图标的访问方法
  15. oracle 自增数,ORACLE自增函数,一般函数
  16. 2022-2027年中国肺炎疫苗行业市场运行现状及投资战略研究报告
  17. mySQL提取姓氏_MySQL 提取姓名大写首字母缩写
  18. 本地缓存、服务器缓存、分布式缓存介绍
  19. python lambda if语句_菜鸟提问: lambda 后接if
  20. 从零开始学习HarmonyOS应用开发——1

热门文章

  1. leetcode分类刷题笔记
  2. 国外15款开源免费软件
  3. 海尔微型计算机一键还原怎么操作,电脑的一键还原在哪_电脑一键还原详细教程_电脑一键还原怎么操作...
  4. 登峰造极,师出造化,Pytorch人工智能AI图像增强框架ControlNet绘画实践,基于Python3.10
  5. 通用模型切片处理过程 CesiumLab系列教程
  6. .NET整合及绿色软件工具VMThinApp使用
  7. word2vec Parameter Learning Explained(Hierarchical Softmax,Negative Sampling)
  8. NC | 哈佛医学院刘洋彧组MAG解析人微生物组在COVID-19中的作用
  9. 动态mfc下调试无法进入mfc源代码的解决方法
  10. MATLAB基本常识知识总结