热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

django中ImageField的使用2020.12.19

原标题:django中ImageField的使用---2020.12.19ImageField的使用笔记今天完善作业写的订单系统,主要是给每一个菜品增加

原标题:django中ImageField的使用---2020.12.19


ImageField的使用笔记

今天完善作业写的订单系统,主要是给每一个菜品增加图片,看起来美观一些,但是没想到这个小小的需求花了我一天时间,记录下来,算增长知识了。


使用流程



1.配置setting文件

MEDIA_ROOT代表的是上传图片的根目录,MEDIA_URL代表的是访问文件时url的前缀。

# 图片储存根路径
MEDIA_ROOT = join('media')
# 图片访问url
MEDIA_URL = '/IMG/'


2.model里面增加ImageField属性

up_load一定要配置,代表你最后的图片会存储到MEDIA_ROOT/up_load(实际上是你赋予的名称)这个文件夹中。

class Menu(models.Model):
"""
餐品数据库
"""

ID = models.BigAutoField(primary_key=True,editable=False)
lastEditTime = models.DateTimeField(auto_now_add=True)
merchantID = models.ForeignKey(Usr, verbose_name="商家账号", on_delete=models.CASCADE,to_field='ID')
itemName = models.CharFiwww.yii666.comeld(max_length=20,verbose_name="餐品名")
itemText = models.TextField(verbose_name="餐品简介")
price = models.FloatField(verbose_name="餐品价格")
################# up_文章来源地址36127.htmlload代表你上传图片所存储的文件夹名字
picture = models.ImageField(verbose_name='餐品图片',null=True,upload_to='img/')
class Meta:
db_table = "Menu"
verbose_name = "餐品数据表"
ordering=['-lastEditTime']


3.Form表单类

本项目使用的是django自带的Form表单类进行数据的传递。

class MerchantDish(forms.Form):
"""
商家菜品提交表单
"""

itemName = forms.CharField(max_length=20,label="餐品名")
itemText = forms.CharField(max_length=300,label="餐品简介")
price = forms.FloatField(label="餐品价格")
picture = forms.ImageField(label='餐品图片')


4.html模板文件(增加菜品)

注意一定要添加:enctype=“multipart/form-data”。

<form action="updateDish_post/" method="post" enctype="multipart/form-data">
{% csrf_token %} {{form.as_p}}
<button type="submit">修改</button>
<button type="button"><a href="/MerchantSystem/DelDish/{{dishID}}/">删除</a></button>
</form>


5.显示菜品的html模板文件

重要的是src中路径的配置,有两种方法,建议法一,自己感觉比较安全,就算没有picture时也不会报错。(注意:可调整图片显示大小)
法一:/IMG(你自己定义的MEDIA_URL)/{{dish.picture}} ----dish代表后端传来的菜品,dish.picture代表你使文章来源地址36127.html用的这个类中的那个有ImageField属性的字段;
法二:{{dish.picture.url}} 因为ImageField是文件类,里面有三个属性name、path、url可以直接访问。

{% for dish in menu %}
<!--将目录的数据展示在html中-->
<!-- 提交到一个含参数的url注意后端的接收 -->
<form action="/MerchantSystem/Dish/{{dish.ID}}/" method="post">
{% csrf_token %}
<li class="media">
<div class="media-left media-middle" >
<img class="media-object" width="150" height="150" src="/IMG/{{dish.picture}}" alt="">
</div>
<div class="media-body">
<h4 class="media-heading">
<button type='submit' class=" url" title="更新菜品信息">
菜名:{{dish.itemName|default:"Null"}}
</button>
<span class="label label-default">
价格:{{dish.price|default:"Null"}}
</span>
</h4>
简介:{{dish.itemText|default:"Null"}}
</div>
</li>
</form>
{% empty %}
<!--若中无数据展示如下内容-->
<p>暂无数据..</p>
{% endfor %} {% endblock tableBody %}


6.路径静态化

在所有的url中都要配置如下:urlpatterns + static…

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.base_view, name = "base"),# 顾客服务系统
path('order//', views.order_view),# 订单详情
path('order//submit/',views.order_submit),# 提交订单
path('pay//', views.pay_view),# 缴费
path('pay//submit/',views.pay_submit),#确认账单
path('order/list/',views.order_list_view),#历史订单列表
path('order/confirm//',views.order_confirm),#订单确认收到
path('order/comment//',views.comment),#到达相应菜品的评论界面
path('order/comment_post//',views.comment_post)#提交评论
] + static(settings.MEDIA_URL, document_root=settings.MEDIA文章来源站点https://www.yii666.com/_ROOT)


7.修改上传的图片

首先用form表单上传图片,检查有效之后,把cleaned_data中的picture数据赋值给要更新对象中的picture属性,最后save即可。代码如下:

def updawww.yii666.comteDish_post(request,dishID):
"""
接受修改菜品的请求
"""

dish_form = MerchantDish(request.POST,request.FILES)
if dish_form.is_valid() :
dish = Menu.objects.get(ID = dishID)
dish.itemName = dish_form.cleaned_data['itemName']
dish.itemText = dish_form.cleaned_data['itemText']
dish.price = dish_form.cleaned_data['price']
dish.picture = dish_form.cleaned_data['picture']
dish.save()
# dishChange = dish_form.clean()
return redirect('/MerchantSystem/')
elif dish_form.errors is not None:
print(dish_form.errors)
return HttpResponse(str(dish_form.errors))


8.设置默认图片

这个步骤我查了好久的资料,但是都不行,好像不可以直接在model.py文件中设置default,我最后都快放弃了,但是自己还是凭运气试出来了,不知道原理,但还是放在这,希望对大家有帮助。
方法是在显示图片的html模板中的src处写一个default,代码如下:
dish是后端传过来的参数,default指向的是默认图片所在的位置。

<div class="media-left media-middle" >
<!-- {{dish.url|default:"Null"}} -->
<img class="media-object" width="150" height="150" src="/IMG/{{dish.picture|default:'img/default.jpg'}}" alt="">
</div>

参考资料:
ImageField的使用:https://www.jianshu.com/p/6107e9843ee1
默认图片的赋值(感觉方法不行):https://www.cnblogs.com/haoshine/p/5447181.html

来源于:django中ImageField的使用---2020.12.19


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 深入理解父组件与子组件的引用和访问
    本文详细介绍了如何在Vue.js中通过$children和$refs属性实现父组件对子组件的访问,并提供了具体的代码示例及最佳实践。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
author-avatar
jg山家小屋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有