鱼C论坛

 找回密码
 立即注册
查看: 1614|回复: 9

[已解决]关于django中form表单的使用方法

[复制链接]
发表于 2020-11-20 00:09:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用form表单上传到mysql数据库后,input type为file,限定为图片,数据库中对应的格式为blob,但是我要拿出来的时候他给我的数据是一个b`图片名.jpg,查过了之后知道是二进制的一个图片名.jpg路径,我用的方法是<img src={{数据库中的数据}}>请问一下怎么才能把图片显示在前段网页上,还是说我一开始的上传方法就错了
最佳答案
2020-11-20 00:43:08
一开始的上传方法就错了  img应该写入本地  数据库只存路径xxx.jpg字符串而不是blob

最终效果肯定是 <img src='/static/{{数据库中的数据}}'>

django有个bug 文件名不能包含百分号 提前告诉你这个坑


附送一个我以前写的上传
  1.     def post(self,request):
  2.         title = request.data.get("title",'')
  3.         length = request.data.get("length",'')
  4.         if request.FILES.get("file0") is None:
  5.             return Response({"msg": '上传失败 无文件'})
  6.         if int(length)<1 or int(length)>9:
  7.             return Response({"msg": '上传失败 文件个数不匹配'})
  8.         try:
  9.             imgurl_list=[]
  10.             for i in range(int(length)):
  11.                 file_obj = request.FILES.get('file'+str(i))
  12.                 #给图片拼接静态目录路径,并去掉图片文件名中可能含有的百分号。
  13.                 imgurl = os.path.join('static','img', str(int(time.time()+i)) + file_obj.name.replace("%",""))
  14.                 imgurl_list.append(imgurl)
  15.                 f = open(os.path.join(BASE_DIR, imgurl), 'wb')
  16.                 for chunk in file_obj.chunks():
  17.                     f.write(chunk)
  18.                 f.close()
  19.         except:
  20.             return Response({"msg": '储存过程失败 可以反馈给程序猿'})#一个chunk:2.5M
  21.         else:
  22.             imgurl_list_json = json.dumps(imgurl_list)
  23.             models.Album.objects.create(title=title, imgurl=imgurl_list_json,imglen=length, motif=motif)
  24.             return Response({"msg": '相册上传成功'})
复制代码

对应的前端也有独特的上传方式
代码太长了不贴了 可以看
https://nanarino.github.io/vue-upImg/

本帖被以下淘专辑推荐:

  • · django|主题: 61, 订阅: 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-20 00:43:08 | 显示全部楼层    本楼为最佳答案   
一开始的上传方法就错了  img应该写入本地  数据库只存路径xxx.jpg字符串而不是blob

最终效果肯定是 <img src='/static/{{数据库中的数据}}'>

django有个bug 文件名不能包含百分号 提前告诉你这个坑


附送一个我以前写的上传
  1.     def post(self,request):
  2.         title = request.data.get("title",'')
  3.         length = request.data.get("length",'')
  4.         if request.FILES.get("file0") is None:
  5.             return Response({"msg": '上传失败 无文件'})
  6.         if int(length)<1 or int(length)>9:
  7.             return Response({"msg": '上传失败 文件个数不匹配'})
  8.         try:
  9.             imgurl_list=[]
  10.             for i in range(int(length)):
  11.                 file_obj = request.FILES.get('file'+str(i))
  12.                 #给图片拼接静态目录路径,并去掉图片文件名中可能含有的百分号。
  13.                 imgurl = os.path.join('static','img', str(int(time.time()+i)) + file_obj.name.replace("%",""))
  14.                 imgurl_list.append(imgurl)
  15.                 f = open(os.path.join(BASE_DIR, imgurl), 'wb')
  16.                 for chunk in file_obj.chunks():
  17.                     f.write(chunk)
  18.                 f.close()
  19.         except:
  20.             return Response({"msg": '储存过程失败 可以反馈给程序猿'})#一个chunk:2.5M
  21.         else:
  22.             imgurl_list_json = json.dumps(imgurl_list)
  23.             models.Album.objects.create(title=title, imgurl=imgurl_list_json,imglen=length, motif=motif)
  24.             return Response({"msg": '相册上传成功'})
复制代码

对应的前端也有独特的上传方式
代码太长了不贴了 可以看
https://nanarino.github.io/vue-upImg/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 08:16:48 | 显示全部楼层
kogawananari 发表于 2020-11-20 00:43
一开始的上传方法就错了  img应该写入本地  数据库只存路径xxx.jpg字符串而不是blob

最终效果肯定是

我看了别人的方法是在app里面创了一个form.py,然后在那个里面写一个和models一样的数据类型,然后对应,然后前段form用了一个{{form.py中的class名来绑定}},但是我用了之后没有效果。请问一下那个的作用是什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 13:31:26 From FishC Mobile | 显示全部楼层
那个是可有可无的 是限定上传的字段符合是否符合规则的,比如标题不能重复之类的。这个 我完全没限定,其实还好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 21:29:47 | 显示全部楼层
kogawananari 发表于 2020-11-20 13:31
那个是可有可无的 是限定上传的字段符合是否符合规则的,比如标题不能重复之类的。这个 我完全没限定,其实 ...

还是晕。。我卡这里卡了三天了。。这是我views里面的函数。其实很简单。我数据库里面就两个列。
  1. def addlbttodb(request):
  2.     if request.method == "POST":
  3.         lbt_tp = request.FILES.get("addlbt_lbttp[0]")
  4.     lbt = Lbt()
  5.     lbt.lbtid = Lbt.objects.all().count() + 1
  6.     lbt.lbttp = lbt_tp
  7.     lbt.save()
  8.     return HttpResponseRedirect('/lunbotu/')
复制代码

然后我的html里面的写的是
  1. {% for contact in contacts %}
  2.                 <div class="rmid_xmxq">
  3.                     <div class="title_2">{{ contact.lbtid }}</div>
  4.                     <img class="title_2" src="/media/{{ contact.lbttp }}" alt="">

  5.                     <div class="xmcz">
  6.                         <a href="" class="xmcz_2" style="color: #7d7d7d;">查看</a>
  7.                         <a href="" class="xmcz_2" style="color: #7d7d7d;">编辑</a>
  8.                         <a href="" class="xmcz_2" style="color: red; text-decoration-color: red;">
  9.                             删除
  10.                         </a>
  11.                     </div>
  12.                 </div>
  13.             {% endfor %}
复制代码

还有一个views的函数是我用了他那个自带的翻页的
  1. def lunbotu(request):
  2.     lbt_list = Lbt.objects.all().order_by('-lbtid')
  3.     paginator = Paginator(lbt_list, 7)
  4.     page = request.GET.get('page')
  5.     try:
  6.         contacts = paginator.page(page)
  7.     except PageNotAnInteger:
  8.         contacts = paginator.page(1)
  9.     except EmptyPage:
  10.         contacts = paginator.page(paginator.num_pages)
  11.     return render(request,'lunbotu.html',{'contacts':contacts,'lbt_list':lbt_list})
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 21:31:11 | 显示全部楼层
kogawananari 发表于 2020-11-20 13:31
那个是可有可无的 是限定上传的字段符合是否符合规则的,比如标题不能重复之类的。这个 我完全没限定,其实 ...

然后他那个html的图片的检查元素的时候返回的是
  1. <img class="title_2" src="/media/b'img/\xe7\x8b\x90\xe4\xbb\x99\xe5\xa3\x81\xe7\xba\xb8.jpg'" alt="">
复制代码

真不知道怎么解决。。而且也不知道是什么原因引起的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 21:33:48 | 显示全部楼层
kogawananari 发表于 2020-11-20 13:31
那个是可有可无的 是限定上传的字段符合是否符合规则的,比如标题不能重复之类的。这个 我完全没限定,其实 ...

上传函数是该写在哪里啊。。我完全没懂。是该重新新建一个python文件还是就直接在views视图里面写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 22:56:06 | 显示全部楼层
Somnr丶风 发表于 2020-11-20 21:33
上传函数是该写在哪里啊。。我完全没懂。是该重新新建一个python文件还是就直接在views视图里面写

我的项目是用的django1.11.20  你要不克隆了运行试试 https://github.com/nanarino/cdb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 22:57:37 | 显示全部楼层
kogawananari 发表于 2020-11-20 22:56
我的项目是用的django1.11.20  你要不克隆了运行试试 https://github.com/nanarino/cdb

额。。我用的是3.1的django。主要就是这块form这一块有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-21 00:07:33 | 显示全部楼层
现在的问题就是到前端网页里面检查元素,图片那个里面的img是  src="../media/img/b'img/\xe7\x8b\x90\xe4\xbb\x99\xe5\xa3\x81\xe7\xba\xb8.jpg'"
到底是什么问题有大佬说一下吗。。自己顶一下。。别沉啊。被关了三天了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表