鱼C论坛

 找回密码
 立即注册
查看: 2299|回复: 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 文件名不能包含百分号 提前告诉你这个坑


附送一个我以前写的上传
    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/

本帖被以下淘专辑推荐:

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

使用道具 举报

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

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

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


附送一个我以前写的上传
    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/
想知道小甲鱼最近在做啥?请访问 -> 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里面的函数。其实很简单。我数据库里面就两个列。
def addlbttodb(request):
    if request.method == "POST":
        lbt_tp = request.FILES.get("addlbt_lbttp[0]")
    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})
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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="">
真不知道怎么解决。。而且也不知道是什么原因引起的。
想知道小甲鱼最近在做啥?请访问 -> 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, 2025-1-17 14:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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