Somnr丶风 发表于 2020-11-20 00:09:18

关于django中form表单的使用方法

使用form表单上传到mysql数据库后,input type为file,限定为图片,数据库中对应的格式为blob,但是我要拿出来的时候他给我的数据是一个b`图片名.jpg,查过了之后知道是二进制的一个图片名.jpg路径,我用的方法是<img src={{数据库中的数据}}>请问一下怎么才能把图片显示在前段网页上,还是说我一开始的上传方法就错了

kogawananari 发表于 2020-11-20 00:43:08

一开始的上传方法就错了img应该写入本地数据库只存路径xxx.jpg字符串而不是blob

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

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


附送一个我以前写的上传
    def post(self,request):
      title = request.data.get("title",'')
      length = request.data.get("length",'')
      if request.FILES.get("file0") is None:
            return Response({"msg": '上传失败 无文件'})
      if int(length)<1 or int(length)>9:
            return Response({"msg": '上传失败 文件个数不匹配'})
      try:
            imgurl_list=[]
            for i in range(int(length)):
                file_obj = request.FILES.get('file'+str(i))
                #给图片拼接静态目录路径,并去掉图片文件名中可能含有的百分号。
                imgurl = os.path.join('static','img', str(int(time.time()+i)) + file_obj.name.replace("%",""))
                imgurl_list.append(imgurl)
                f = open(os.path.join(BASE_DIR, imgurl), 'wb')
                for chunk in file_obj.chunks():
                  f.write(chunk)
                f.close()
      except:
            return Response({"msg": '储存过程失败 可以反馈给程序猿'})#一个chunk:2.5M
      else:
            imgurl_list_json = json.dumps(imgurl_list)
            models.Album.objects.create(title=title, imgurl=imgurl_list_json,imglen=length, motif=motif)
            return Response({"msg": '相册上传成功'})
对应的前端也有独特的上传方式
代码太长了不贴了 可以看
https://nanarino.github.io/vue-upImg/

Somnr丶风 发表于 2020-11-20 08:16:48

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

最终效果肯定是


我看了别人的方法是在app里面创了一个form.py,然后在那个里面写一个和models一样的数据类型,然后对应,然后前段form用了一个{{form.py中的class名来绑定}},但是我用了之后没有效果。请问一下那个的作用是什么呢

kogawananari 发表于 2020-11-20 13:31:26

那个是可有可无的 是限定上传的字段符合是否符合规则的,比如标题不能重复之类的。这个 我完全没限定,其实还好。

Somnr丶风 发表于 2020-11-20 21:29:47

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

还是晕。。我卡这里卡了三天了。。这是我views里面的函数。其实很简单。我数据库里面就两个列。
def addlbttodb(request):
    if request.method == "POST":
      lbt_tp = request.FILES.get("addlbt_lbttp")
    lbt = Lbt()
    lbt.lbtid = Lbt.objects.all().count() + 1
    lbt.lbttp = lbt_tp
    lbt.save()
    return HttpResponseRedirect('/lunbotu/')
然后我的html里面的写的是
{% for contact in contacts %}
                <div class="rmid_xmxq">
                  <div class="title_2">{{ contact.lbtid }}</div>
                  <img class="title_2" src="/media/{{ contact.lbttp }}" alt="">

                  <div class="xmcz">
                        <a href="" class="xmcz_2" style="color: #7d7d7d;">查看</a>
                        <a href="" class="xmcz_2" style="color: #7d7d7d;">编辑</a>
                        <a href="" class="xmcz_2" style="color: red; text-decoration-color: red;">
                            删除
                        </a>
                  </div>
                </div>
            {% endfor %}
还有一个views的函数是我用了他那个自带的翻页的
def lunbotu(request):
    lbt_list = Lbt.objects.all().order_by('-lbtid')
    paginator = Paginator(lbt_list, 7)
    page = request.GET.get('page')
    try:
      contacts = paginator.page(page)
    except PageNotAnInteger:
      contacts = paginator.page(1)
    except EmptyPage:
      contacts = paginator.page(paginator.num_pages)
    return render(request,'lunbotu.html',{'contacts':contacts,'lbt_list':lbt_list})

Somnr丶风 发表于 2020-11-20 21:31:11

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

然后他那个html的图片的检查元素的时候返回的是<img class="title_2" src="/media/b'img/\xe7\x8b\x90\xe4\xbb\x99\xe5\xa3\x81\xe7\xba\xb8.jpg'" alt="">
真不知道怎么解决。。而且也不知道是什么原因引起的。

Somnr丶风 发表于 2020-11-20 21:33:48

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

上传函数是该写在哪里啊。。我完全没懂。是该重新新建一个python文件还是就直接在views视图里面写

kogawananari 发表于 2020-11-20 22:56:06

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

我的项目是用的django1.11.20你要不克隆了运行试试 https://github.com/nanarino/cdb

Somnr丶风 发表于 2020-11-20 22:57:37

kogawananari 发表于 2020-11-20 22:56
我的项目是用的django1.11.20你要不克隆了运行试试 https://github.com/nanarino/cdb

额。。我用的是3.1的django。主要就是这块form这一块有问题。

Somnr丶风 发表于 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'"
到底是什么问题有大佬说一下吗。。自己顶一下。。别沉啊。被关了三天了。
页: [1]
查看完整版本: 关于django中form表单的使用方法